PoolingHttpClientConnectionManager:如何执行Https请求?

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

在这一点上,我得到了这个:

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

然后我尝试了一个请求,一切都很好。HttpGethttp://www.google.com

然后,我通过cmd创建了一个信任库并导入了目标网站的证书,设置了一个带有我的信任库的信任库,并设置了:SSLConnectionSocketFactorySSLSocketFactoryhttpClient

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,那么我得到一个异常。
如果我做同样的事情,没有一切都很好。HttpGetPKIX path building failed.setConnectionManager(cManager)

你们谁能告诉我如何才能让它工作吗?(别担心,我不创建任何ddos工具)

提前致谢!

附言:我正在使用HttpComponents 4.3.1


答案 1

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

只是不得不添加

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

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


答案 2