1. ホーム
  2. java

[解決済み] HttpClientError: ターゲットサーバーが応答しなかった

2022-02-16 18:58:21

質問

HTTPクライアントを使用してサーバーにアクセスしようとしています。 PoolingClientConnectionManager 個々のホストの最大接続数を設定する

//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の永続化のために接続プーリングを使用しています。

このエラーが散発的に発生しています。

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)

どなたか解決方法をご存知でしょうか?

アイドル状態の接続もシャットダウンしています。

どなたか助けてください。

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

解決方法は?

おそらく、HttpClientのバグと思われます。

HttpClient 4.4をお使いの方は、4.4.1へのアップグレードをお試しください。

より詳細な情報が必要な場合は、以下を参照してください。 このリンク .

アップグレードができない場合は、以下のリンクが参考になると思います。

http://www.nuxeo.com/blog/using-httpclient-properly-avoid-closewait-tcp-connections/

がんばってください