HttpClient4.X Invalid use of SingleClientConnManager: connection still allocated问题

HttpClient4.X Invalid use of SingleClientConnManager: connection still allocated问题

这次的项目首次大量用到了httpclient4.1开发。但仅仅在测试环境就发生了无法连接的情况,异常报

Invalid use of SingleClientConnManager: connection still allocated

从国外的一张帖子看到,httpclient默认使用的是SingleClientConnManager,但在并发环境下最好使用ThreadSafeClientConnManager。代码如下:

HttpClient client = new DefaultHttpClient(new ThreadSafeClientConnManager());

HttpGet httpGet = null;

InputStream in = null;

try {

httpGet = new HttpGet(url);

HttpResponse response = client.execute(httpGet);

HttpEntity responseEntity = response.getEntity();

if (responseEntity != null) {

in = response.getEntity().getContent();

return EntityUtils.toByteArray(responseEntity);

}

} finally {

if (httpGet != null) {

httpGet.abort();

}

IOUtils.closeQuietly(in);

}

return null;

这样就可以避免发生异常,感谢国外的这个帖子

http://old.nabble.com/HttpClient-instance-management-td24185137.html


http超时处理:

使用是apache的HttpClient:

DefaultHttpClient:
请求超时
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 60000);
读取超时
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 60000);

HttpClient
HttpClient httpClient=new HttpClient();
链接超时
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000); 
读取超时
httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000)


你可能感兴趣的:(HttpClient4.X Invalid use of SingleClientConnManager: connection still allocated问题)