Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PoollightTPClientConnectionManager:如何处理Https请求?_Java_Ssl_Apache Httpcomponents_Truststore - Fatal编程技术网

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();
如果我尝试执行Https
HttpGet
,则会出现
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()