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?


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.cn][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]



Reply via email to