簡體   English   中英

PoolingHttpClientConnectionManager:如何做Https請求?

[英]PoolingHttpClientConnectionManager: How to do Https requests?

我目前正在嘗試使用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 failed異常。
如果我在沒有.setConnectionManager(cManager)情況下這樣做,一切正常。

誰能告訴我如何讓這個工作? (別擔心,我不創建任何ddos工具)

提前致謝!

PS:我正在使用HttpComponents 4.3.1

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

只需添加

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

並將socketFactoryRegistry作為參數傳遞給socketFactoryRegistry的構造PoolingHttpClientConnectionManager 現在它工作得很好:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM