#java #proxy #httpclient
#java #прокси #httpclient
Вопрос:
У меня есть клиентское приложение, которое подключается к серверу в Интернете для передачи и загрузки файлов.
Однако доступ к Интернету осуществляется через прокси. Я использую HttpClient на толстом клиенте и загружаю файл Apache Commons на стороне сервера.
Я устанавливаю прокси на HttpClient, как показано ниже:
HttpClient client = new HttpClient();
HostConfiguration config = client.getHostConfiguration();
config.setProxy(PROXY_HOST, PROXY_PORT);
PostMethod filePost = new PostMethod(servletPath);
int status = client.executeMethod(config , filePost);
Однако вместо жестко заданных значений для PROXY_HOST, PROXY_PORT выше, я использую HttpURLConnection для получения информации о прокси и установки в эти значения. Это работает нормально.
Если я не устанавливаю настройки прокси подобным образом, HttpClient игнорирует настройки моего прокси и не обнаруживает их автоматически, и в результате мое приложение не может подключиться к серверу в Интернете.
Теперь, когда я подключаюсь к серверу с помощью HttpClient, запрос отправляется через прокси, но завершается с ошибкой, поскольку он ожидает учетных данных пользователя для аутентификации для предоставленной информации прокси. Я не могу понять, как заставить это работать, поскольку я ожидал, что после подключения к прокси появится всплывающее окно для ввода идентификатора пользователя и пароля, а запрос вообще не выполняется.
Может кто-нибудь подсказать, как заставить HttpClient работать с прокси без жесткого кодирования значений PROXY_HOST, PROXY_PORT.
Кроме того, это приложение будет запущено из толстого клиента для разных пользователей. Таким образом, информация о прокси должна автоматически определяться из настроек браузера (что для меня и делает HttpURLConnection).
Может кто-нибудь, пожалуйста, предложить решение для этого сценария?
Комментарии:
1. Какую версию вы используете? Это
HostConfiguration
выглядит как 3.1 (т. Е. commons HttpClient), и я ничего не нашел здесь об аутентификации. Для компонентов HTTP (например, версии 4.*) на странице примера есть пример.
Ответ №1:
Для прокси и порта я бы предложил использовать системное свойство в командной строке Java следующим образом:
java -Dhttp.proxyHost=myproxyserver.com -Dhttp.proxyPort=80 MyMainClass
Пользователь и пароль будут запрошены у пользователя через графический интерфейс, а затем установлены с помощью метода System.GetProperties().put(строка, String). Параметры являются:
- http.proxyUser
- http.proxyPassword
Полная документация доступна здесь. Статью, относящуюся именно к вашей проблеме, можно найти здесь.