Без изменения кода, как заставить httpClient использовать прокси по переменным окружения или аргументам JVM - PullRequest
28 голосов
/ 02 марта 2011

Я обнаружил, что настройка http.proxyHost и http.proxyPort бесполезна для httpClient.Как заставить httpClient использовать прокси по переменным окружения или аргументам виртуальной машины или что-то подобное без изменения кода?

Ответы [ 5 ]

21 голосов
/ 27 ноября 2012
10 голосов
/ 19 апреля 2016

HTTP-клиент (v 4.5.1 для моего случая) может использовать системный прокси, например:

HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build();
//or 
HttpClient httpClient = HttpClients.createSystem();
6 голосов
/ 02 марта 2011

вы можете принудительно настроить прокси на HttpClient методом client.getHostConfiguration().setProxy(host, port).Я обычно создаю класс-оболочку около HttpClient и при инициализации этого класса я устанавливаю прокси из любого источника (env. Variable ...).

Я использовал java.net.ProxySelector.setDefault(new MyProxySelector()) в ситуации, когда вы не можете установить прокси напрямуюна HttpClient.Вы должны реализовать свой собственный класс ProxySelector, а метод выбора делает выбор прокси на основе запрошенного URI.Вы можете сделать url-> proxy mapping для настройки определенного адреса URI на требуемый прокси или вернуть один прокси для всех запрошенных URI глобально.

Как я вижу в исходном коде HttpClient, другого способа настроить только прокси нет.метод setProxy.Я использую commons-httpclient-3.1.

0 голосов
/ 28 января 2013

AFAIK, вы не можете управлять этим без изменений кода, но вы можете приблизиться к нативному поведению, используя свой собственный менеджер соединений. См. ProxySelector изменяет схему URL с https: // на сокет: //

0 голосов
/ 02 марта 2011

Помогает ли это?

System.setProperty("https.proxyHost", proxy_host);
System.setProperty("http.proxyHost", proxy_host);
System.setProperty("https.proxyPort", proxy_port);
System.setProperty("http.proxyPort", proxy_port);

Или, конечно, вы можете передать те же свойства через командную строку

...