2014-08-29 42 views
3

看来我可以指定代理,当我建立新HttpClient有:的Apache的HttpClient 4.3.5设置代理

HttpHost proxy = new HttpHost("someproxy", 8080); 
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); 
CloseableHttpClient httpclient = HttpClients.custom() 
    .setRoutePlanner(routePlanner) 
    .build(); 

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d5e475

考虑是否有可能修改现有客户端的代理设置。

回答

7

您可以创建您自己的HttpRoutePlanner实现,它将允许更改HttpHost。

public class DynamicProxyRoutePlanner implements HttpRoutePlanner { 

    private DefaultProxyRoutePlanner defaultProxyRoutePlanner = null; 

    public DynamicProxyRoutePlanner(HttpHost host){ 
     defaultProxyRoutePlanner = new DefaultProxyRoutePlanner(host); 
    } 

    public void setProxy(HttpHost host){ 
     defaultProxyRoutePlanner = new DefaultProxyRoutePlanner(host); 
    } 

    public HttpRoute determineRoute(HttpHost target, HttpRequest request, HttpContext context) { 
     return defaultProxyRoutePlanner.determineRoute(target,request,context); 
    } 
} 

然后你就可以在你的代码

HttpHost proxy = new HttpHost("someproxy", 8080); 
DynamicProxyRoutePlanner routePlanner = new DynamicProxyRoutePlanner(proxy); 
CloseableHttpClient httpclient = HttpClients.custom() 
    .setRoutePlanner(routePlanner) 
    .build(); 

//Any time change the proxy 
routePlanner.setProxy(new HttpHost("someNewProxy", 9090)); 
+0

哦使用DynamicProxyRoutePlanner,这是显而易见的。无论如何,Thx!我如何设置不使用代理? – 2014-08-29 14:34:44

+0

可能只是修改DynamicProxyRoutePlanner.determineRoute方法。如果defaultProxyRoutePlanner字段将设置为空,我会使用org.apache.http.impl.conn.DefaultRoutePlanner(使用DefaultSchemePortResolver.INSTANCE构造它) – 2014-08-29 14:55:36