在 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(使用前将#替换为@)