2014-08-29 89 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