1. ホーム
  2. java

[解決済み] PoolingHttpClientConnectionManagerです。Https リクエストをどのように行うか?

2022-02-17 16:04:51

質問

現在、複数の HttpGet で同時にリクエストすることができます。 CloseableHttpClient .
その方法についてググってみたところ、答えは PoolingHttpClientConnectionManager .

この時、私はこうなった。

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

そして、試しに HttpGet へのリクエストは http://www.google.com で、すべてうまくいきました。

その後、cmdでトラストストアを作成し、対象のWebサイトの証明書をインポートして SSLConnectionSocketFactory をトラストストアに設定し SSLSocketFactoryhttpClient :

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ツールは作っていませんのでご安心ください。)

ありがとうございました。

追伸:HttpComponents 4.3.1を使っています。

どのように解決するのですか?

答えが見つかりました。 https://stackoverflow.com/a/19950935/1223253

ちょうど追加する必要がありました。

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

とパス socketFactoryRegistry のコンストラクタのパラメータとして使用します。 PoolingHttpClientConnectionManager . 今は問題なく動作しています :)