Apache HttpClient 4.3.x没有默认主机?

时间:2014-03-31 23:11:02

标签: apache-httpclient-4.x

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中设置默认主机?

为什么你认为他们改变了,并决定在请求对象和客户端的默认值中预先设置一切?

1 个答案:

答案 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();