Java PoollightTPClientConnectionManager:如何处理Https请求?
我目前正试图使用Java PoollightTPClientConnectionManager:如何处理Https请求?,java,ssl,apache-httpcomponents,truststore,Java,Ssl,Apache Httpcomponents,Truststore,我目前正试图使用CloseableHttpClient同时执行多个HttpGet请求 我在谷歌上搜索了如何做到这一点,答案是使用一个PoolghttpClientConnectionManager 在这一点上,我得到了: PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager(); CloseableHttpClient httpClient = HttpClients.custom
CloseableHttpClient
同时执行多个HttpGet
请求我在谷歌上搜索了如何做到这一点,答案是使用一个
PoolghttpClientConnectionManager
在这一点上,我得到了:
PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager();
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cManager)
.build();
然后我尝试了HttpGet
请求http://www.google.com
一切正常。然后我通过cmd创建了一个信任库,导入了目标网站的证书,用我的信任库设置了一个
SSLConnectionSocketFactory
,并设置了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();
如果我尝试执行HttpsHttpGet
,则会出现PKIX路径构建失败
异常。如果我不使用
.setConnectionManager(cManager)
也这样做,一切都会正常工作
你们谁能告诉我怎么才能让它工作?(别担心,我不会创建任何ddos工具)
提前谢谢
备注:我正在使用HttpComponents 4.3.1,找到了答案:
我不得不补充一句
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register("https", sslsf).build();
Registry socketFactoryRegistry=RegistryBuilder。create().register(“https”,sslsf).build();
并将socketFactoryRegistry
作为参数传递给poollighttpclientconnectionmanager
的构造函数。
现在它工作得很好:)如何使用PoolightTPClientConnectionManager创建此连接后,我的代码正在工作,但我想知道连接池是否工作,是否打开客户端日志以检查连接池中的租约:太好了,我花了2天的时间,在您的帮助下,它在5分钟内得到解决。如果我能早点看到这个就好了。。谢谢。如果您想要“http”和“https”,请检查此注释-`CloseableHttpClient httpClient=HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cManager.build();`此处设置SSLSocketFacotry()在此处没有用处,因为使用了connectionmanager内部通过注册表设置的套接字工厂。因此,在设置连接管理器时,在构建客户端时无需设置sslsocketfactory()