38

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

4

5 回答 5

22

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

SystemDefaultHttpClient 已添加到版本。4.2

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

于 2012-11-27T13:06:47.393 回答
20

HTTP 客户端(我的情况是 v 4.5.1)可以像这样使用系统代理:

HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build();
//or 
HttpClient httpClient = HttpClients.createSystem();
于 2016-04-19T09:37:24.147 回答
6

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

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

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

于 2011-03-02T09:25:56.293 回答
0

AFAIK,如果不更改代码,您将无法管理此问题,但您可以通过使用自己的连接管理器来更接近本机行为。请参阅ProxySelector 将 URL 的方案从 https:// 更改为 socket://

于 2013-01-28T13:55:46.990 回答
-14

这有帮助吗?

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

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

于 2011-03-02T08:42:37.157 回答