我在SocketConfig
中设置了套接字超时,并将SocketConfig设置为连接管理器
connManager.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(soTimeout).build())
并通过在 RequestConfig
中将单个请求的套接字超时值设置为
httpRequest.setConfig(RequestConfig.copy(defaultRequestConfig).setSocketTimeout(timeout).build())
引用link .
对于所有 http 请求,使用 RequestConfig 设置的新值将按预期覆盖旧值。 但对于 https 请求,它始终考虑 SocketConfig 中设置的旧值。
在得知这可能是 4.3.1 引用 link 中的问题后,我还将 httpclient 从 4.3.1 升级到 4.3.6 。
但即使这样也没有帮助我解决问题。
我错过了什么吗?关于如何解决这个问题有什么想法吗?
最佳答案
这只是部分正确。 RequestConfig
代表请求级别设置,而SocketConfig
代表连接级别设置。安全连接需要进行 SSL/TLS 握手并建立安全 session ,然后才能用于执行请求。因此,只有在完全建立 HTTPS 连接后才能联合 RequestConfig
设置。在此之前,仅适用 SocketConfig
。
关于java - 在 RequestConfig 和 SocketConfig 中设置套接字超时对于 HTTP 和 HTTPS 的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833836/