我正在将一些代码从httpclient4迁移到httpclient 5。缺少迁移文档。
我有这个问题,但在网上找不到简单的答案。我询问 phind.com,它给了我我需要的东西。我想我会在这里发帖以防对其他人有帮助。
这是我的问题:
在apache的httpclient5库中,有一个PoolingHttpClientConnectionManager。它有一个 setDefaultConnectionConfig,它接受一个 ConnectionConfig 对象 ConnectionConfig 有一个 setSocketTimeout 方法。 PoolingHttpClientConnectionManager 还有一个 setDefaultSocketConfig,它采用 SocketConfig 方法。 SocketConfig 有一个 setSoTimeout。传递给 ConnectionConfig 的套接字超时与通过 SocketConfig 传递的套接字超时有什么区别?
然后我问了这个后续问题:
在httpclient4中,我们通过RequestConfig.setSocketTimeout设置socket超时。这与 httpclient5 中 ConnectionConfig 或 SocketConfig 中的套接字超时相当吗?
我将在下面发布答案。
在 Apache HttpClient 5 库中,
ConnectionConfig
和 SocketConfig
都用于配置套接字和连接的各个方面,但它们有不同的用途,并且对 HttpClient 的行为有不同的影响。
ConnectionConfig
设置的套接字超时专门适用于连接的套接字超时,即客户端在建立连接后放弃之前等待数据的时间量。这对于处理连接建立后服务器可能不会立即响应的情况特别有用。SocketConfig
设置的socket超时适用于socket上所有操作的socket超时,包括连接建立、读操作和写操作。这是更通用的,会影响套接字的整体行为。传递给
ConnectionConfig
的套接字超时和通过 SocketConfig 传递的套接字超时之间的主要区别在于它们的范围和应用:
ConnectionConfig
中的套接字超时具体适用于连接阶段,影响客户端在建立连接后等待响应的时间。SocketConfig
中的套接字超时更广泛地适用于所有套接字操作,包括连接建立、读取和写入套接字。实际上,如果您正在配置 HttpClient 并需要设置套接字超时,则可以使用
SocketConfig
进行影响所有套接字操作的更全局配置。如果您需要专门为连接阶段设置超时,您可以使用ConnectionConfig
。但是,请务必注意,可以组合这些设置来为 HttpClient 的行为提供全面的配置。
在 Apache HttpClient 4 中,通过
RequestConfig.setSocketTimeout
设置套接字超时与在 HttpClient 5 中的 SocketConfig
中设置套接字超时相当。这两种配置都处理客户端在抛出异常之前等待服务器响应的最长时间。一个异常,本质上是套接字超时设置。
RequestConfig.setSocketTimeout(int soTimeout)
设置套接字超时,其中soTimeout是以毫秒为单位的超时。此配置应用于整个请求执行,包括连接、发送请求和接收响应。这是一个高级配置,可以应用于单个请求或作为 HttpClient 实例 4611 发出的所有请求的默认配置。SocketConfig.setSoTimeout(int soTimeout)
设置套接字超时,其中soTimeout是以毫秒为单位的超时。此配置也适用于整个请求执行,与 HttpClient 4 中的套接字超时相当。它影响客户端在建立连接、发送请求、等待响应数据之后等待响应的时间长度 2.两者之间的主要区别在于它们的应用背景:
RequestConfig
在请求级别应用,这允许对单个请求的超时设置进行细粒度控制。SocketConfig
在套接字配置级别应用,这会影响 HttpClient 执行的所有套接字操作。这两种配置的目的都是为整个请求-响应周期设置超时,确保客户端不会无限期地等待响应。然而,由于库及其架构的演变,它们在 HttpClient 4 和 HttpClient 5 中的应用和管理方式有所不同。