現在、HttpGet
を使用して複数のCloseableHttpClient
リクエストを同時に実行しようとしています。
それを行う方法をグーグルで検索したところ、答えはPoolingHttpClientConnectionManager
を使用することでした。
この時点で私はこれを手に入れました:
_PoolingHttpClientConnectionManager cManager = new PoolingHttpClientConnectionManager();
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cManager)
.build();
_
次に、_http://www.google.com
_へのHttpGet
リクエストを試しましたが、すべて正常に機能しました。
次に、cmdを使用してトラストストアを作成し、対象のWebサイトの証明書をインポートし、トラストストアでSSLConnectionSocketFactory
を設定し、SSLSocketFactory
のhttpClient
を設定します。
_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ツールを作成しません)
前もって感謝します!
追伸:私はHttpComponents4.3.1を使用しています
答えが見つかりました: https://stackoverflow.com/a/19950935/122325
追加する必要がありました
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register("https", sslsf).build();
socketFactoryRegistry
をパラメーターとしてPoolingHttpClientConnectionManager
のコンストラクターに渡します。今では問題なく動作します:)