如何在 Apache HttpClient 4.3+ 中设置默认 HttpHost 目标?

2024-04-06

在 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 并注意到DefaultHttpClient and ClientPNames现在都已弃用,取而代之的是HttpClientBuilder and RequestConfig分别。但是我找不到这样的方法来定义默认目标RequestConfig.

文档 http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/CloseableHttpClient.html#execute%28org.apache.http.HttpHost,%20org.apache.http.HttpRequest%29forexecute 确实引用了该输入目标参数可以接受 null,所以我确信仍然有一种方法可以促进这一点,但我正在努力弄清楚这一点:

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


这应该可以解决问题

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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Apache HttpClient 4.3+ 中设置默认 HttpHost 目标? 的相关文章

随机推荐