2013-12-11 5 views
7

मैं वर्तमान में CloseableHttpClient के साथ एक ही समय में एकाधिक HttpGet अनुरोध करने का प्रयास कर रहा हूं।
मैं यह कैसे करना है और उत्तर PoolingHttpClientConnectionManager का उपयोग करना था।पूलिंग एचटीपी क्लाइंट कनेक्शन मैनेजर: एचटीपीएस अनुरोध कैसे करें?

PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager(); 
CloseableHttpClient httpClient = HttpClients.custom() 
    .setConnectionManager(cManager) 
    .build(); 

तब मैं http://www.google.com करने के लिए एक HttpGet अनुरोध की कोशिश की और सब कुछ ठीक काम किया:

इस बिंदु पर मैं यह मिल गया।

तब मैं cmd ​​के माध्यम से एक truststore बनाया है और लक्षित वेबसाइट का प्रमाण पत्र, एक SSLConnectionSocketFactory मेरी truststore के साथ आयातित सेटअप और सेट httpClient की SSLSocketFactory:

KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
FileInputStream inputStream = new FileInputStream(new File("myTrustStore.truststore")); 
trustStore.load(inputStream, "nopassword".toCharArray()); 
inputStream.close(); 

SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(trustStore).build(); 
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, 
    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); 

PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager(); 
CloseableHttpClient httpClient = HttpClients.custom() 
    .setSSLSocketFactory(sslsf) 
    .setConnectionManager(cManager) 
    .build(); 

अगर मैं तो एक HTTPS HttpGet पर अमल करने की कोशिश मुझे PKIX path building failed अपवाद मिलता है।
यदि मैं .setConnectionManager(cManager) के बिना ऐसा करता हूं तो सब ठीक काम करता है।

क्या आप में से कोई भी मुझे बता सकता है कि मैं इसे कैसे काम कर सकता हूं? (चिंता न करें, मैं कोई डीडीओ उपकरण नहीं बनाता)

अग्रिम धन्यवाद!

पी.एस .: मैं HttpComponents 4.3.1

उत्तर

13

उपयोग कर रहा हूँ मिले जवाब: https://stackoverflow.com/a/19950935/1223253

बस PoolingHttpClientConnectionManager के निर्माता के लिए पैरामीटर के रूप में

Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register("https", sslsf).build(); 

जोड़ सकते हैं और socketFactoryRegistry पारित करने के लिए किया था। अब यह ठीक काम करता है :)

+0

इसे बनाने के बाद PoolingHttpClientConnectionManager का उपयोग कैसे करें, मेरा कोड काम कर रहा है, लेकिन मैं जानना चाहता हूं कि कनेक्शन पूलिंग काम करता है या नहीं – Labeo

+1

कनेक्शन पूल से पट्टे की जांच के लिए क्लाइंट लॉगिंग चालू करें: http://hc.apache.org/httpcomponents-client-ga/logging.html –

संबंधित मुद्दे