在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
和ClientPNames
现在都已弃用,分别支持HttpClientBuilder
和RequestConfig
。但是我找不到使用RequestConfig
定义默认目标的方法。
Documentation确实引用了那个输入目标参数可以接受null,所以我确信还有一种方法可以促进这一点,但我很难弄清楚这一点:
target - 请求的目标主机。如果实现仍然可以确定路由(例如,默认目标或检查请求),则它们可以接受null。
答案 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();