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

时间:2011-03-02 08:37:16

标签: java apache-commons-httpclient

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

5 个答案:

答案 0 :(得分:21)

答案 1 :(得分:10)

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

Button btnLicencePlate = (Button) findViewById(R.id.licenceplatecontainer);
btnLicencePlate.setText(txtLicenceplate.getText().toString());

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:0)

AFAIK,如果没有代码更改,您无法对此进行管理,但您可以使用自己的连接管理器更接近本机行为。见ProxySelector changes URL's scheme from https:// to socket://

答案 4 :(得分:-12)

这有帮助吗?

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

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