在不更改代码的情况下,如何强制httpClient通过环境变量或JVM参数使用代理

use*_*949 30 java apache-commons-httpclient

我发现设置http.proxyHost并且http.proxyPort对httpClient没用.如何通过环境变量或VM参数或类似的东西强制httpClient使用代理而不更改代码?

小智 21

https://issues.apache.org/jira/browse/HTTPCLIENT-1128

SystemDefaultHttpClient已添加到ver.4.2

请参阅http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/SystemDefaultHttpClient.html

  • 正如下面提到的@wangf,你也可以在任何HttpClientBuilder上调用`.build()`之前使用`.useSystemProperties()`来读取系统属性,如`http.proxyHost`和`http.proxyPort`:http:// hc .apache.org/httpcomponents客户端-GA/HttpClient的/ apidocs /组织/阿帕奇/ HTTP/IMPL /客户端/ HttpClientBuilder.html#useSystemProperties() (5认同)

wan*_*ngf 15

HTTP客户端(对于我的案例,v 4.5.1)可以使用这样的系统代理:

HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build();
//or 
HttpClient httpClient = HttpClients.createSystem();
Run Code Online (Sandbox Code Playgroud)


mic*_*man 6

您可以HttpClient使用client.getHostConfiguration().setProxy(host, port)方法强制代理.我通常创建包装类HttpClient,在初始化这个类时,我从任何来源设置代理(env.variable ...).

我使用java.net.ProxySelector.setDefault(new MyProxySelector())的情况是你无法直接设置代理HttpClient.您必须实现自己的ProxySelector类,并且方法select基于请求的URI进行代理选择.您可以使用url-> proxy映射将特定URI地址配置为所需的代理,或者为全局请求的URI返回一个代理.

正如我在HttpClient源代码中看到的,没有其他方法如何配置仅代理setProxy方法.我正在使用commons-httpclient-3.1.


Sur*_*ran -17

这有帮助吗?

System.setProperty("https.proxyHost", proxy_host);
System.setProperty("http.proxyHost", proxy_host);
System.setProperty("https.proxyPort", proxy_port);
System.setProperty("http.proxyPort", proxy_port);
Run Code Online (Sandbox Code Playgroud)

或者当然您可以通过命令行传递相同的属性