On Fri, 2017-01-20 at 15:17 +0800, sdy wrote: > hi, folks, > I'm working with httpclient (4.2.1) on suse linux > enterprise server 11(x86_64), and construct the connectionpool > manager code as follow: > > > KeyStore keyStore = getKeyStore(KEY_STORE_CLIENT_PATH, > KEY_STORE_CLIENT_PASS); > KeyStore trustStore = getKeyStore(KEY_STORE_TRUST_PATH, > KEY_STORE_TRUST_PASS); > socketFactory = new SSLSocketFactory(keyStore, KEY_STORE_CLIENT_PASS, > trustStore); > socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME > _VERIFIER); > connManager = new PoolingClientConnectionManager(); > connManager.setMaxTotal(100); > connManager.setDefaultMaxPerRoute(100); > connManager.getSchemeRegistry().register(new Scheme("https", 443, > socketFactory)); > params = new BasicHttpParams(); > params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,5000); > params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000); > httpClient = new DefaultHttpClient(connManager, params); > > > > > and do the post request with the following method: > > > private String doPost(String url, String payload) { > HttpPost httpPost = null; > String result = null; > HttpResponse response = null; > try { > httpPost = new HttpPost(url); > StringEntity postEntity = new StringEntity(payload); > httpPost.setEntity(postEntity); > httpPost.addHeader("Content-Type", "application/json"); > httpPost.addHeader("Authorization", "Basic " + this.authString); > response = this.httpClient.execute(httpPost); > result = EntityUtils.toString(response.getEntity()); > EntityUtils.consume(response.getEntity()); > } catch (Exception e) { > e.printStackTrace(); > return null; > }finally { > if(response != null){ > if(response.getEntity() != null){ > InputStream input; > try { > input = response.getEntity().getContent(); > if(input != null){ > input.close(); > } > } catch (IllegalStateException | IOException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > } > } > } > return result; > } > > > the problem for me is that I want to use the keep-alive ability > of PoolingClientConnectionManager, but the httpclient close the > connection after the single post request. the debug log as follow. > Who konws > what's wrong? Is it the bug of the httpclient ? or I have done > something wrong with my code? > >
There is nothing wrong. Connections associated with a particular SSL principal are considered state-full. Please see this section of the tutorial http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/advanced .html#stateful_conn Oleg > DEBUG [org.apache.http.impl.conn.PoolingClientConnectionManager] > Connection request: [route: {s}->https://api.svip.jiguang.cn][total > kept alive: 100; route allocated: 100 of 100; total allocated: 100 of > 100] > DEBUG [org.apache.http.impl.conn.DefaultClientConnection] Connection > 0.0.0.0:37394<->183.240.12.100:443 closed > DEBUG [org.apache.http.impl.conn.PoolingClientConnectionManager] > Connection leased: [id: 100][route: {s}->https://api.svip.jiguang.cn] > [total kept alive: 99; route allocated: 100 of 100; total allocated: > 100 of 100] > DEBUG [org.apache.http.impl.conn.DefaultClientConnectionOperator] > Connecting to api.svip.jiguang.cn:443 > DEBUG [org.apache.http.client.protocol.RequestAddCookies] CookieSpec > selected: best-match > DEBUG [org.apache.http.client.protocol.RequestAuthCache] Auth cache > not set in the context > DEBUG [org.apache.http.client.protocol.RequestProxyAuthentication] > Proxy auth state: UNCHALLENGED > DEBUG [org.apache.http.impl.client.DefaultHttpClient] Attempt 1 to > execute request > DEBUG [org.apache.http.impl.conn.DefaultClientConnection] Sending > request: POST /v3/push HTTP/1.1 > DEBUG [org.apache.http.headers] >> POST /v3/push HTTP/1.1 > DEBUG [org.apache.http.headers] >> Content-Type: application/json > DEBUG [org.apache.http.headers] >> Authorization: Basic > ZGQxMjEwYWJhYTNhZWZmYTFkMDZjNDhlOjA5MjRiZThhMDdlNWJiZjViYTdkYTNmZA== > DEBUG [org.apache.http.headers] >> Content-Length: 471 > DEBUG [org.apache.http.headers] >> Host: api.svip.jiguang.cn > DEBUG [org.apache.http.headers] >> Connection: Keep-Alive > DEBUG [org.apache.http.impl.conn.DefaultClientConnection] Receiving > response: HTTP/1.1 200 OK > DEBUG [org.apache.http.headers] << HTTP/1.1 200 OK > DEBUG [org.apache.http.headers] << Server: nginx > DEBUG [org.apache.http.headers] << Date: Fri, 20 Jan 2017 07:05:02 > GMT > DEBUG [org.apache.http.headers] << Content-Type: application/json > DEBUG [org.apache.http.headers] << Transfer-Encoding: chunked > DEBUG [org.apache.http.headers] << Connection: keep-alive > DEBUG [org.apache.http.headers] << X-Rate-Limit-Limit: 33000 > DEBUG [org.apache.http.headers] << X-Rate-Limit-Remaining: 32799 > DEBUG [org.apache.http.headers] << X-Rate-Limit-Reset: 4 > DEBUG [org.apache.http.headers] << X-JPush-MsgId: 3073146139 > DEBUG [org.apache.http.impl.client.DefaultHttpClient] Connection can > be kept alive indefinitely > DEBUG [org.apache.http.impl.conn.PoolingClientConnectionManager] > Connection [id: 100][route: {s}->https://api.svip.jiguang.cn][state: > CN=unionpayhce.svip.jiguang.cn, O=Shenzhen HeXunHuaGu Information > Technologies Co.Ltd, L=Shenzhen, ST=GuangDong, C=CN] can be kept > alive indefinitely > DEBUG [org.apache.http.impl.conn.PoolingClientConnectionManager] > Connection released: [id: 100][route: {s}->https://api.svip.jiguang.c > n][state: CN=unionpayhce.svip.jiguang.cn, O=Shenzhen HeXunHuaGu > Information Technologies Co.Ltd, L=Shenzhen, ST=GuangDong, > C=CN][total kept alive: 100; route allocated: 100 of 100; total > allocated: 100 of 100] > > > --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org