Apache HttpClient 4.3.x没有默认主机



HttpClient 4.3.x issue.

似乎没有办法在 4.3.x 的 CloseableHttpClient 上附加默认主机。

这令人沮丧,因为它要求所有请求构建器预先知道所有主机信息,而不仅仅是构建特定于调用的请求部分并让客户端填写任何遗漏的默认值(例如,默认主机、端口等)。

在 4.2.x 及更早版本中,您可以在客户端上设置默认主机,任何请求只需要子路径 + 参数。

但是在 4.3.x 中,您有令人困惑的 setRoutePlanner(x)(可能有代理设置)和 setProxy(x)(可能被路由规划器覆盖)层,我对它们如何与实际客户端实例结算感到困惑。 调试它表明路由规划器不会用于default_host,并且 4.3.2 版本实际上希望设置已弃用的ClientPNames.DEFAULT_HOST(对于空目标主机的情况),这可能是一个缺陷。

我发现apache httpclient在所有这些变化中都偏离了深深的边缘。

不幸的是,这些示例也没有完全阐明 http 客户端的用法。

顺便说一句:新设计是如此泥泞,为什么不直接设置DefaultHost(x)?并消除代理分层的混乱。

除非我错过了什么,否则如何在 http 客户端 4.3.x 中设置默认主机?

为什么您认为他们改变了并决定在请求对象中预先制作所有内容,而不是在客户端中预先制作默认值?

这是使用自定义路线规划器提供默认目标主机的方法

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

最新更新