【问题标题】:Edit timeout in HttpClient (4.5)在 HttpClient (4.5) 中编辑超时
【发布时间】:2016-01-14 11:52:22
【问题描述】:

我需要能够修改在我的 CloseAbleHttpClient 中设置的超时。以下是我设置不同超时的方法:

RequestConfig config = RequestConfig.copy(RequestConfig.DEFAULT)
            .setConnectTimeout(timeout)
            .setSocketTimeout(timeout)
            .setConnectionRequestTimeout(managerTimeout)
            .build();

    httpClient = HttpClients.custom()
            .setConnectionManager(connectionManager)
            .setDefaultRequestConfig(config)
            .build();

我是否必须创建一个新的 RequestConfig 对象,并再次构建 HttpClients.custom() 来实现这一点?我已经尝试过了,问题出现在我需要我的 CloseableHttpClient 是最终的。如果我设置超时 2 次,这是不可能的。我将不胜感激有关如何最好地修改超时属性的任何意见!

【问题讨论】:

    标签: java apache-httpclient-4.x final


    【解决方案1】:

    没有什么可以阻止您根据每个请求使用不同的请求配置

    RequestConfig defaultRequestConfig = RequestConfig.custom()
            .setConnectTimeout(timeout)
            .setSocketTimeout(timeout)
            .setConnectionRequestTimeout(managerTimeout)
            .build();
    
    CloseableHttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connectionManager)
            .setDefaultRequestConfig(defaultRequestConfig)
            .build();
    
    RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
            .setConnectTimeout(timeout * 2)
            .setSocketTimeout(timeout * 2)
            .setConnectionRequestTimeout(managerTimeout * 2)
            .build();
    
    HttpGet get = new HttpGet();
    get.setConfig(requestConfig);
    

    【讨论】:

    • 请问你为什么第二次调用 setConfig 到 'HttpGet get' 而不是 HttpClient?
    • (1) HttpClient 实例是不可变的,不能修改它们 (2) 一开始不应该 不修改 HttpClient 实例。 (3) HttpClient 使用的 RequestConfig 表示仅在个别请求不提供它们时才使用的默认值。通常应该在 HttpUriRequest 实例上配置请求参数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多