HttpClientError: Le serveur cible n’a pas pu répondre

J’essaie de bash un serveur en utilisant le client http en utilisant PoolingClientConnectionManager définissant des connexions maximales pour des hôtes individuels

  //Code that inilizes my connection mananger 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 SsortingngEntity(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); 

C’est-à-dire que nous utilisons le pool de connexion pour la persistance http.

Nous obtenons cette erreur de manière sporadique:

 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) 

Est-ce que quelqu’un sait comment résoudre ce problème?

Nous fermons également les connexions inactives.

Est-ce que certains peuvent aider?

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

Probablement, c’est un bogue dans le HttpClient.

Si vous utilisez HttpClient 4.4, essayez de passer à la version 4.4.1.

Si vous voulez plus d’informations, consultez ce lien .

Si vous ne pouvez pas mettre à niveau, les liens suivants peuvent être utiles.

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

Bonne chance!

Récemment confronté similaire en utilisant HttpClient 5 .

Sur l’ HttpClient journaux HttpClient et constaté que le problème était dû à des connexions obsolètes.

L’ajout du ci-dessous a aidé à résoudre le problème, il détecte et valide les connexions devenues obsolètes tout en restant inactif dans le pool avant d’être réutilisé.

 PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); connectionManager.setValidateAfterInactivity(timeinmilliseconds);