Java 公共HTTPclient和代理

Java 公共HTTPclient和代理,java,post,proxy,get,httpclient,Java,Post,Proxy,Get,Httpclient,我正在使用apache的公共httpclient库。是否可以通过代理发出HTTP请求?更具体地说,我需要对多线程POST请求使用代理列表(现在我正在测试单线程GET请求) 我尝试使用: httpclient.getHostConfiguration().setProxy("67.177.104.230", 58720); 我发现该代码有错误: 21.03.2012. 20:49:17 org.apache.commons.httpclient.HttpMethodDirecto

我正在使用apache的公共httpclient库。是否可以通过代理发出HTTP请求?更具体地说,我需要对多线程POST请求使用代理列表(现在我正在测试单线程GET请求)

我尝试使用:

        httpclient.getHostConfiguration().setProxy("67.177.104.230", 58720);
我发现该代码有错误:

21.03.2012. 20:49:17 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect
21.03.2012. 20:49:17 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
21.03.2012. 20:49:19 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect
21.03.2012. 20:49:19 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
21.03.2012. 20:49:21 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (java.net.ConnectException) caught when processing request: Connection refused: connect
21.03.2012. 20:49:21 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
org.apache.commons.httpclient.ProtocolException: The server xxxxx failed to respond with a valid HTTP response
    at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1846)
    at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)
    at org.apache.commons.httpclient.ConnectMethod.execute(ConnectMethod.java:144)
    at org.apache.commons.httpclient.HttpMethodDirector.executeConnect(HttpMethodDirector.java:495)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:390)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
    at test.main(test.java:42)

当我删除该行时,一切正常。

对于httpclient 4.1.x,您可以这样设置代理(取自):


我在
HttpClient
version4中遇到了类似的问题

由于SOCKS代理错误,我无法连接到服务器,我使用以下配置修复了该错误:

client.getParams().setParameter("socksProxyHost",proxyHost);
client.getParams().setParameter("socksProxyPort",proxyPort);

从Apache HTTPComponents 4.3.x HttpClientBuilder类开始,从系统属性
http.proxyHost
http.proxyPort
设置代理默认值,或者您可以使用setProxy方法覆盖它们。

下面是如何使用最新版本的
HTTPClient
(4.3.4)来实现这一点


虽然这个问题很古老,但我看到仍然没有确切的答案。我将在这里尝试回答这个问题

简而言之,我认为这里的问题是如何为ApacheCommonsHttpClient(org.Apache.commons.HttpClient.HttpClient)设置代理设置

下面的代码段应该可以工作:

HttpClient client = new HttpClient();
HostConfiguration hostConfiguration = client.getHostConfiguration();
hostConfiguration.setProxy("localhost", 8080);
client.setHostConfiguration(hostConfiguration);

下面是我如何使用Santosh Singh(我给了他+1分)的答案,为旧的(<4.3)HttpClient(我无法升级)解决这个问题的:


如果您的软件使用
ProxySelector
(例如,使用PAC脚本而不是静态主机/端口),并且您的HTTPComponents版本为4.3或更高版本,则您可以将
ProxySelector
用于
HttpClient
,如下所示:

ProxySelector myProxySelector = ...;
HttpClient myHttpClient = HttpClientBuilder.create().setRoutePlanner(new SystemDefaultRoutePlanner(myProxySelector))).build();
然后像往常一样执行您的请求:

HttpGet myRequest = new HttpGet("/");
myHttpClient.execute(myRequest);

我不使用新的HTTP组件,我使用的是commons httpclient。也许我应该转学……我参加聚会有点晚了,但这对我的内部发展环境来说很有吸引力。多谢各位,请投赞成票。这确实是可能的。在您的例外情况下,哪个主机是经过编辑的
xxxxx
?你的代理还是目的地?为什么你有这么多的联系被拒绝?您的代理是否正常工作?xxxxx是我发送请求的服务器,而不是代理。代理应该有效。我正在使用socks5类型的代理。您已配置HTTP代理,而不是SOCKS代理。HttpClient 3不支持SOCKS。您可以使用系统属性“socksProxyHost”和“socksProxyPort”。或者HttpComponents HttpClient 4可能支持SOCKS代理。即使我使用http/https代理,我也会遇到很多错误。真的不知道怎么了。我尝试了HttpComponents和Commons HttpClientWhat's new errors?您好,您在哪里设置代理用户/密码的凭据。很抱歉,对此不确定。您可以在此处查看如何使用“CloseableHttpClient httpclient=HttpClients.createDefault();”来自tomcat?我有一个servlet,它调用静态函数,该函数假设向另一个服务器发送http请求。经过数小时的搜索,这个答案对我很有帮助。。非常感谢!
HttpClient httpclient = new HttpClient();
if (System.getProperty("http.proxyHost") != null) {
  try {
    HostConfiguration hostConfiguration = httpclient.getHostConfiguration();
    hostConfiguration.setProxy(System.getProperty("http.proxyHost"), Integer.parseInt(System.getProperty("http.proxyPort")));
    httpclient.setHostConfiguration(hostConfiguration);
    this.getLogger().warn("USING PROXY: "+httpclient.getHostConfiguration().getProxyHost());
  } catch (Exception e) {
    throw new ProcessingException("Cannot set proxy!", e);
  }
}
ProxySelector myProxySelector = ...;
HttpClient myHttpClient = HttpClientBuilder.create().setRoutePlanner(new SystemDefaultRoutePlanner(myProxySelector))).build();
HttpGet myRequest = new HttpGet("/");
myHttpClient.execute(myRequest);