问题描述
我正在尝试使用 PoolingClientConnectionManager
为单个主机设置最大连接数来使用 HTTP 客户端访问服务器
I am trying to hit a server using HTTP client using PoolingClientConnectionManager
setting max connections for individual hosts
//Code that initializes my connection manager and HTTP client
HttpParams httpParam = httpclient.getParams();
HttpConnectionParams.setSoTimeout(httpParam, SOCKET_TIMEOUT);
HttpConnectionParams.setConnectionTimeout(httpParam, CONN_TIMEOUT);
httpclient.setParams(httpParam);
//Run a thread which closes Expired connections
new ConnectionManager(connManager).start();
//Code that executes my request
HttpPost httpPost = new HttpPost(url);
HttpEntity httpEntity = new StringEntity(request, "UTF-8");
httpPost.setEntity(httpEntity);
Header acceptEncoding = new BasicHeader("Accept-Encoding", "gzip,deflate");
httpPost.setHeader(acceptEncoding);
if(contenttype != null && !contenttype.equals("")){
Header contentType = new BasicHeader("Content-Type", contenttype);
httpPost.setHeader(contentType);
}
InputStream inputStream = null;
LOG.info(dataSource + URL + url + REQUEST + request);
HttpResponse response = httpclient.execute(httpPost);
也就是说,我们使用连接池来实现 http 持久化.
That is we are using Connection pooling for http persistence .
我们偶尔会收到此错误:
We are getting this error sporadically :
The target server failed to respond
org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
有人知道如何解决这个问题吗?
Does any one know how to resolve this?
我们也在关闭空闲连接.
We are shutting down idle connections as well.
可以帮忙吗.
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
推荐答案
可能是HttpClient的一个bug.
Probably, it is a bug in the HttpClient.
如果您使用的是 HttpClient 4.4,请尝试升级到 4.4.1.
If you are using the HttpClient 4.4, please try to upgrade to 4.4.1.
如果您想了解更多信息,请查看此链接.
If you want for more information, please look at this link.
如果您无法升级,以下链接可能会有所帮助.
If you can't upgrade, the following links might be helpful.
http://www.nuxeo.com/blog/using-httpclient-properly-avoid-closewait-tcp-connections/
祝你好运!
这篇关于HttpClientError: 目标服务器未能响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!