Java 公共HTTPclient和代理
我正在使用apache的公共httpclient库。是否可以通过代理发出HTTP请求?更具体地说,我需要对多线程POST请求使用代理列表(现在我正在测试单线程GET请求) 我尝试使用: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
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);