【问题标题】:Apache HttpClient 4.3.5 set proxyApache HttpClient 4.3.5 设置代理
【发布时间】:2014-08-29 12:07:03
【问题描述】:

似乎我可以在构造新的HttpClient时指定代理:

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

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

【问题讨论】:

    标签: java proxy apache-httpclient-4.x


    【解决方案1】:

    您可以创建自己的 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); 
        }
    }
    

    然后你可以在你的代码中使用这个 DynamicProxyRoutePlanner

    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));
    

    【讨论】:

    • 哦,这很明显。无论如何谢谢!如何设置不使用代理?
    • 可能只是修改 DynamicProxyRoutePlanner.determineRoute 方法。如果将 defaultProxyRoutePlanner 字段设置为 null,我将使用 org.apache.http.impl.conn.DefaultRoutePlanner(使用 DefaultSchemePortResolver.INSTANCE 构建它)
    猜你喜欢
    • 2015-01-04
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    相关资源
    最近更新 更多