HttpClient 4.3.x问题。
似乎没有办法在CloseableHttpClient上为4.3.x附加默认主机。
这令人沮丧,因为它要求所有请求构建者预先知道所有主机信息,而不是仅仅构建特定于呼叫的请求部分,并让客户端填写任何遗漏的默认值(例如,像默认主机,端口等)。
使用4.2.x和之前的版本,您可以在客户端上设置默认主机,任何请求只需要一个子路径+参数。
但是对于4.3.x,你有令人困惑的setRoutePlanner(x)层(可能有代理设置)和setProxy(x)(可以被路由规划者覆盖),我很困惑他们如何解决实际问题客户端实例。并且调试它表明route-planner不会被用于default_host,而4.3.2版本实际上需要设置已弃用的ClientPNames.DEFAULT_HOST(对于具有空目标主机的情况),这可能是一个缺陷。
我发现apache httpclient在所有这些变化方面都处于不利地位。
不幸的是,这些示例并未完全阐明http客户端的使用情况。
顺便说一句:新的设计是如此泥泞,为什么不只是setDefaultHost(x)?并澄清代理分层的混淆。
除非我遗漏了什么,如何在http客户端4.3.x中设置默认主机?
为什么你认为他们改变了,并决定在请求对象和客户端的默认值中预先设置一切?
答案 0 :(得分:2)
这是如何使用自定义路线规划器提供默认目标主机
HttpRoutePlanner routePlanner = new DefaultRoutePlanner(DefaultSchemePortResolver.INSTANCE) {
@Override
public HttpRoute determineRoute(
final HttpHost target,
final HttpRequest request,
final HttpContext context) throws HttpException {
return super.determineRoute(
target != null ? target : new HttpHost("some.default.host", 80),
request, context);
}
};
CloseableHttpClient client = HttpClients.custom()
.setRoutePlanner(routePlanner)
.build();