首页 文章

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

提问于
浏览
1

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 回答

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

相关问题