Настройка прокси для HttpClient 4 не работает

Я использую библиотеку Apache HttpClient для подключения к URL-адресу. Сеть, в которой я работаю, имеет безопасный прокси-сервер. когда я использую пакет java.net для подключения к URL-адресу, мне просто нужно добавить

System.setProperty("http.proxyHost", proxy);
System.setProperty("http.proxyPort", proxyPort); 

идентификатор пользователя и пароль прокси-сервера не требуются, но когда я пытаюсь подключиться через httpclient, я получаю 407 ошибка аутентификации прокси-сервера. Мой код:

HttpHost proxy = new HttpHost("xyz.abc.com",8080,"http");
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);

Прокси использует аутентификацию NTML. Я не хочу передавать идентификатор пользователя и пароль.


person Vaibhav Jain    schedule 19.12.2012    source источник
comment
Ближайший ответ, который я нашел, находится в stackoverflow: stackoverflow .com/questions/6962047/ Я просто думаю, что учетные данные NTLM вашей системы Windows недоступны из вашего уровня Java, и тогда вам нужно повторно пройти аутентификацию на прокси-сервере. Я могу быть не прав.   -  person philippe lhardy    schedule 19.12.2012
comment
Во-первых, я думаю, что в HttpClient нет встроенной поддержки NTML. Во-вторых, учетные данные меняются довольно часто, поэтому я не могу использовать их таким образом. доступ к учетным данным моей системы Windows через уровень java, если он доступен для пакета java.net URLConnect, поэтому он также будет доступен для библиотеки httpclient.   -  person Vaibhav Jain    schedule 19.12.2012


Ответы (2)


Я обновился до httpclient 4.2, и эта версия имеет встроенную поддержку NTML. Просто нужно добавить следующие строки в код

HttpClient httpclient = new DefaultHttpClient();
NTCredentials creds = new NTCredentials("user", "pwd", "myworkstation", "microsoft.com");
httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);

Для дальнейшего чтения схемы аутентификации Httpclent вы можете обратиться по адресу http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html#d5e947

Но мой вопрос все еще открыт, почему HttpClent не выбирает системный прокси, как это делает простая программа Java.

person Vaibhav Jain    schedule 30.12.2012

Чтобы получить системные свойства, вы можете использовать SystemDefaultHttpClient вместо DefaultHttpClient.

Начиная с HttpClient 4.3, этот класс объявлен устаревшим в пользу HttpClientBuilder:

HttpClient hc = new HttpClientBuilder().useSystemProperties().build();
person Jon Ekdahl    schedule 06.08.2014