[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2255?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrei Zhemaituk closed HTTPCLIENT-2255.
----------------------------------------

Thanks for checking with httpclient v5, closing this issue.

Workaround for v4 is to use PoolingHttpClientConnectionManager.

And with regards to upgrade to httpclient v5 - google-http-java-client team 
will assess it separately ( 
[https://github.com/googleapis/google-http-java-client/issues/1791#issuecomment-1373990292]
 ).

> NoHttpResponseException when using BasicHttpClientConnectionManager
> -------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2255
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2255
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>    Affects Versions: 4.5.14
>            Reporter: Andrei Zhemaituk
>            Priority: Major
>
> It seems BasicHttpClientConnectionManager does not validate connection before 
> leasing it (unlike PoolingHttpClientConnectionManager).
> Originally reported and discussed at: 
> [https://github.com/googleapis/google-http-java-client/issues/1791]
>  
> Sample code to reproduce:
>  
> {code:java}
> @Test
> void testDelayBetweenRequestsApacheHttpClient() throws Exception {
>     BasicHttpClientConnectionManager connectionManager = new 
> BasicHttpClientConnectionManager();
>     // PoolingHttpClientConnectionManager connectionManager = new 
> PoolingHttpClientConnectionManager();
>     // connectionManager.setDefaultMaxPerRoute(1);
>     try (CloseableHttpClient httpClient = HttpClients.custom()
>             .setConnectionManager(connectionManager)
>             .build()) {
>         HttpPost request = new 
> HttpPost("https://customsearch.googleapis.com/customsearch/v1";);
>         consume(httpClient.execute(request));
>         Thread.sleep(5 * 60 * 1000);
>         
>         HttpPost request2 = new 
> HttpPost("https://customsearch.googleapis.com/customsearch/v1";);
>         consume(httpClient.execute(request2));
>     }
> }
> private static void consume(HttpResponse response) throws IOException {
>     InputStream content = response.getEntity().getContent();
>     while (content.read() != -1) {
>     }
>     content.close();
> }
> {code}
>  
>  
> When using `BasicHttpClientConnectionManager` the above code fails to execute 
> second request:
>  
> {code:java}
> 2023/01/03 15:40:49:994 EST [DEBUG] BasicHttpClientConnectionManager - Get 
> connection for route {s}->https://customsearch.googleapis.com:443
> 2023/01/03 15:40:50:010 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-0: set socket timeout to 0
> 2023/01/03 15:40:50:039 EST [DEBUG] DefaultHttpClientConnectionOperator - 
> Connecting to customsearch.googleapis.com/142.250.176.202:443
> 2023/01/03 15:40:50:246 EST [DEBUG] DefaultHttpClientConnectionOperator - 
> Connection established 192.168.154.214:62686<->142.250.176.202:443
> 2023/01/03 15:40:50:308 EST [DEBUG] BasicHttpClientConnectionManager - 
> Releasing connection 192.168.154.214:62686<->142.250.176.202:443
> 2023/01/03 15:40:50:309 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-0: set socket timeout to 0
> 2023/01/03 15:40:50:309 EST [DEBUG] BasicHttpClientConnectionManager - 
> Connection can be kept alive indefinitely
> 2023/01/03 15:45:50:312 EST [DEBUG] BasicHttpClientConnectionManager - Get 
> connection for route {s}->https://customsearch.googleapis.com:443
> 2023/01/03 15:45:50:312 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-0: set socket timeout to 0
> 2023/01/03 15:45:50:314 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-0: Close connection
> 2023/01/03 15:45:50:314 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-0: Shutdown connection
> 2023/01/03 15:45:50:314 EST [DEBUG] BasicHttpClientConnectionManager - 
> Releasing connection [Not bound]org.apache.http.NoHttpResponseException: 
> customsearch.googleapis.com:443 failed to respond    at 
> org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)
>     at 
> org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
>     at 
> org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
>     at 
> org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
>     at 
> org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
>     at 
> org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
>     at 
> org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
>     at 
> org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
>     at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
>     at 
> org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
>     at 
> org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
>     at 
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
>     at 
> org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
> {code}
>  
>  
>  
> On the other side when using `PoolingHttpClientConnectionManager`, connection 
> is successfully re-established and code executes successfully:
>  
> {code:java}
> 2023/01/03 15:52:18:116 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection request: [route: 
> {s}->https://customsearch.googleapis.com:443][total available: 0; route 
> allocated: 0 of 1; total allocated: 0 of 20]
> 2023/01/03 15:52:18:135 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection leased: [id: 0][route: 
> {s}->https://customsearch.googleapis.com:443][total available: 0; route 
> allocated: 1 of 1; total allocated: 1 of 20]
> 2023/01/03 15:52:18:142 EST [DEBUG] DefaultHttpClientConnectionOperator - 
> Connecting to customsearch.googleapis.com/142.251.40.138:443
> 2023/01/03 15:52:18:344 EST [DEBUG] DefaultHttpClientConnectionOperator - 
> Connection established 192.168.154.214:49406<->142.251.40.138:443
> 2023/01/03 15:52:18:405 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection [id: 0][route: {s}->https://customsearch.googleapis.com:443] can 
> be kept alive indefinitely
> 2023/01/03 15:52:18:405 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-0: set socket timeout to 0
> 2023/01/03 15:52:18:405 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection released: [id: 0][route: 
> {s}->https://customsearch.googleapis.com:443][total available: 1; route 
> allocated: 1 of 1; total allocated: 1 of 20]
> 2023/01/03 15:57:18:415 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection request: [route: 
> {s}->https://customsearch.googleapis.com:443][total available: 1; route 
> allocated: 1 of 1; total allocated: 1 of 20]
> 2023/01/03 15:57:18:416 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-0: Close connection
> 2023/01/03 15:57:18:417 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection leased: [id: 1][route: 
> {s}->https://customsearch.googleapis.com:443][total available: 0; route 
> allocated: 1 of 1; total allocated: 1 of 20]
> 2023/01/03 15:57:18:435 EST [DEBUG] DefaultHttpClientConnectionOperator - 
> Connecting to customsearch.googleapis.com/142.250.65.202:443
> 2023/01/03 15:57:18:478 EST [DEBUG] DefaultHttpClientConnectionOperator - 
> Connection established 192.168.154.214:50689<->142.250.65.202:443
> 2023/01/03 15:57:18:711 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection [id: 1][route: {s}->https://customsearch.googleapis.com:443] can 
> be kept alive indefinitely
> 2023/01/03 15:57:18:711 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-1: set socket timeout to 0
> 2023/01/03 15:57:18:711 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection released: [id: 1][route: 
> {s}->https://customsearch.googleapis.com:443][total available: 1; route 
> allocated: 1 of 1; total allocated: 1 of 20]
> 2023/01/03 15:57:18:711 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection manager is shutting down
> 2023/01/03 15:57:18:712 EST [DEBUG] DefaultManagedHttpClientConnection - 
> http-outgoing-1: Close connection
> 2023/01/03 15:57:18:712 EST [DEBUG] PoolingHttpClientConnectionManager - 
> Connection manager shut down {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to