我目前正在尝试使用CloseableHttpClient
同时处理多个HttpGet
请求。
我搜索了如何做到这一点,答案是使用PoolingHttpClientConnectionManager
。
PoolingHttpClientConnectionManager:如何做Https请求?
在这一点上,我得到这个:
PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager();
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cManager)
.build();
然后我尝试了HttpGet
请求http://www.google.com
和一切工作正常。
然后,我通过CMD创建了一个信任和我的信任进口目标网站的证书,设置一个SSLConnectionSocketFactory
并设置SSLSocketFactory
httpClient
的:
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)
一切工作正常。
你们中的任何人都可以告诉我如何让这个工作? (别担心,我不会创建任何ddos工具)
在此先感谢!
P.S:我使用的是HttpComponents 4.3.1
如何使用PoolingHttpClientConnectionManager创建后,我的代码正在工作,但我想知道连接池是否有效 – Labeo
打开客户端日志记录以检查连接池中的租约:http:/ /hc.apache.org/httpcomponents-client-ga/logging.html –