在RequestConfig和SocketConfig中设置套接字超时对HTTP和HTTPS的工作方式不同

时间:2015-01-08 05:59:25

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

我在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。 但即使这并没有帮助我解决这个问题 我错过了什么吗?关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:3)

这只是部分正确。 RequestConfig表示请求级别设置,而SocketConfig表示连接级别设置。安全连接需要进行SSL / TLS握手,并在可用于执行请求之前建立安全会话。因此,只有在完全建立HTTPS连接后才能联合RequestConfig设置。在那之前只有SocketConfig适用。