如何在Apache HttpClient 4.3+中设置Default HttpHost Target?

时间:2013-11-23 01:57:54

标签: java default host apache-httpclient-4.x

在Apache HttpClient 4.2中,可以创建DefaultHttpClient并设置主机,使得进行execute调用的人不必在输入请求URI中提供主机信息,即:

HttpHost targetHost = new HttpHost(host, port, secure ? "https" : "http");      
DefaultHttpClient defaultHttp = new DefaultHttpClient(connectionManager);
defaultHttp.getParams().setParameter(ClientPNames.DEFAULT_HOST, targetHost);

我承认这个策略看起来很尴尬,我继承了这段代码:)。我确信在4.2中有更好的方法。

我希望升级到4.3并注意到DefaultHttpClientClientPNames现在都已弃用,分别支持HttpClientBuilderRequestConfig。但是我找不到使用RequestConfig定义默认目标的方法。

执行的

Documentation确实引用了那个输入目标参数可以接受null,所以我确信还有一种方法可以促进这一点,但我很难弄清楚这一点:

  

target - 请求的目标主机。如果实现仍然可以确定路由(例如,默认目标或检查请求),则它们可以接受null。

1 个答案:

答案 0 :(得分:4)

这应该可以解决问题

HttpRoutePlanner rp = new DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE) {

    @Override
    public HttpRoute determineRoute(
            final HttpHost host,
            final HttpRequest request,
            final HttpContext context) throws HttpException {
        HttpHost target = host != null ? host : new HttpHost("some.default.host");
        return super.determineRoute(target, request, context);
    }
};

CloseableHttpClient client = HttpClients.custom()
        .setRoutePlanner(rp)
        .build();