Я обнаружил, что настройка http.proxyHost и http.proxyPort бесполезна для httpClient. Как заставить HTTPClient использовать прокси по переменным окружения или аргументам виртуальной машины или что-то вроде них без изменения кода?
Без изменения кода, как заставить HTTPClient использовать прокси по переменным окружения или аргументам JVM
Ответ 1
в https://issues.apache.org/jira/browse/HTTPCLIENT-1128
SystemDefaultHttpClient был добавлен в ver. 4.2
Ответ 2
вы можете заставить прокси-сервер HttpClient
самостоятельно с помощью метода client.getHostConfiguration().setProxy(host, port)
. Обычно я создаю класс оболочки вокруг HttpClient
, и при инициализации этого класса я устанавливаю прокси из любого источника (переменные env.)...
Я использовал java.net.ProxySelector.setDefault(new MyProxySelector())
в ситуации, когда вы не можете установить прокси напрямую на HttpClient
. Вы должны реализовать свой собственный класс ProxySelector, а метод select делает выбор прокси на основе запрошенного URI. Вы можете сделать сопоставление url- > proxy, чтобы настроить конкретный адрес URI на необходимый прокси-сервер или вернуть один прокси-сервер для всего запрошенного URI во всем мире.
Как я могу видеть в исходном коде HttpClient, нет другого способа настроить прокси только метод setProxy. Я использую commons-httpclient-3.1.
Ответ 3
HTTP-клиент (v 4.5.1 для моего случая) может использовать системный прокси, например:
HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build();
//or
HttpClient httpClient = HttpClients.createSystem();
Ответ 4
AFAIK, вы не можете управлять этим без изменений кода, но вы можете приблизиться к собственному поведению, используя свой собственный диспетчер соединений. См. ProxySelector изменяет схему URL из https://в socket://
Ответ 5
Помогает ли это?
System.setProperty("https.proxyHost", proxy_host);
System.setProperty("http.proxyHost", proxy_host);
System.setProperty("https.proxyPort", proxy_port);
System.setProperty("http.proxyPort", proxy_port);
Или вы можете передать те же свойства через командную строку