Подтвердить что ты не робот

Без изменения кода, как заставить HTTPClient использовать прокси по переменным окружения или аргументам JVM

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

4b9b3361

Ответ 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);

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