PoolingHttpClientConnectionManager:如何做Https请求?

我目前正在尝试使用CloseableHttpClient同时执行多个HttpGet请求。
我搜索了如何做到这一点,答案是使用PoolingHttpClientConnectionManager

此时我得到了这个:

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

然后我尝试了http://www.google.comHttpGet请求,一切正常。

然后我通过cmd创建了一个信任库并导入了目标网站的证书,用我的信任库设置了SSLConnectionSocketFactory并设置了httpClientSSLSocketFactory

 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 failedexception。
如果我在没有.setConnectionManager(cManager)情况下这样做,一切正常。

谁能告诉我如何让这个工作? (别担心,我不创建任何ddos工具)

提前致谢!

PS:我正在使用HttpComponents 4.3.1

找到答案: https : //stackoverflow.com/a/19950935/1223253

只需添加

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

并将socketFactoryRegistry作为参数传递给socketFactoryRegistry的构造PoolingHttpClientConnectionManager 。 现在它工作得很好:)