[英]Apache HTTPClient Timeout at any moment
我正在使用Apache Common的HTTPClient建立HTTP连接。 连接类型为POST,客户端将从连接中读取输出。 但是,无论连接状态如何,我都需要能够随时中止连接。 最好的方法是什么? 有内置的超时时间吗? 问候。
编辑:只是为了澄清我的问题:
我希望用户能够选择何时断开连接。
换句话说,与参数cURL相似的功能:CURLOPT_TIMEOUT https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html
当你使用实例HttpClient的实例HttpClientBuilder ,你可以传递的一个实例RequestConfig的建设者,这inturn接受2个参数。
SocketTimeout
定义套接字超时(SO_TIMEOUT),以毫秒为单位,这是等待数据的超时,或者换句话说,是两个连续数据包之间的最大时间段不活动。
ConnectTimeout
确定连接建立之前的超时时间(以毫秒为单位)。 超时值为零将被解释为无限超时。
ConnectionRequestTimeout
返回从连接管理器请求连接时使用的超时(以毫秒为单位)。 超时值为零将被解释为无限超时。
您正在寻找的是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 。 请参阅“2.6连接永葆战略”的部分页面
如果您使用的是DefaultHttpClient ,它将接受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接受这些设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.