Apache HTTPClient 随时超时

Apache HTTPClient Timeout at any moment

我正在使用 Apache Common 的 HTTPClient 建立 HTTP 连接。 连接类型为 POST,客户端将从连接读取输出。 但是,无论连接状态如何,我都需要能够随时中止连接。这样做的最佳方法是什么? 是否有内置超时? 问候。

编辑: 只是为了澄清我的问题:
我希望用户能够选择何时断开连接。
换句话说,类似于参数 cURL 的功能: CURLOPT_TIMEOUT https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html

当您使用 HttpClientBuilder, you can pass an instance of RequestConfig 向构建器实例化 httpClient 的实例时,构建器又接受 2 个参数。

SocketTimeout - 以毫秒为单位定义套接字超时 (SO_TIMEOUT),这是等待数据的超时,或者换句话说,两个连续数据包之间的最大不活动时间。 =16=]

ConnectTimeout - 确定建立连接前的超时时间(以毫秒为单位)。零超时值被解释为无限超时。

ConnectionRequestTimeout - Returns 从连接管理器请求连接时使用的超时时间(以毫秒为单位)。零超时值被解释为无限超时。

您要找的是 SocketTimeout.

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT)
                .setConnectionRequestTimeout(CONNECTION_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpClient = HttpClientBuilder.create().disableAutomaticRetries().setDefaultRequestConfig(requestConfig)
                .setConnectionManager(poolingHttpClientConnectionManager).disableRedirectHandling().build();

你可以看看ConnectionKeepAliveStrategy. Refer to "2.6. Connection keep alive strategy" section of page

如果您正在使用 DefaultHttpClient, it accepts HttpParams,您可以在其中提供连接相关设置。

SO_TIMEOUT 是 SocketTimeout - 以毫秒为单位定义套接字超时 (SO_TIMEOUT),这是等待数据的超时,或者换句话说,两个连续数据包之间的最大不活动时间).

HttpParams httpParams = new BasicHttpParams();
httpParams.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT);
httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, SOCKET_TIMEOUT);
DefaultHttpClient backend = new DefaultHttpClient(httpParams);

更好的方法是按照@Bandi Kishore 的建议使用 HttpClientBuilder。或者使用 PoolingClientConnectionManager 直接使用 setter 接受这些设置。