2013-12-11 18 views
7

私は現在、CloseableHttpClientで複数のHttpGetリクエストを同時に実行しようとしています。
私はそれを行う方法を探って、答えはPoolingHttpClientConnectionManagerを使用することでした。その後、私はhttp://www.google.comHttpGetリクエストを試してみましたが、すべてがうまく働いていたPoolingHttpClientConnectionManager:Httpsリクエストを行う方法?

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


は、この時点で、私はこれを得ました。その後、

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を実行しようとした場合:

は、それから私は、CMDを経由してトラストストアを作成し、対象Webサイトの証明書をインポートし、セットアップSSLConnectionSocketFactoryを私のトラストストアとし、httpClientSSLSocketFactoryを設定しますPKIX path building failed例外が発生します。
私が.setConnectionManager(cManager)を使わずに同じことをすると、すべて正常に動作します。

どのように私はこれを動作させることができますか教えていただけますか? (心配しないでください、私はddosツールを作成しません)

ありがとうございます!

P.S:私が見つけ答えをHttpComponents 4.3.1

答えて

13

を使用しています:https://stackoverflow.com/a/19950935/1223253

ちょうどPoolingHttpClientConnectionManagerのコンストラクタにパラメータとしてsocketFactoryRegistry

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

を追加し、合格する必要がありました。 これでうまく動作します:)

+0

これを作成した後、コードが動作していますが、接続プールが機能しているかどうかを知りたい場合は – Labeo

+1

接続プールからリースをチェックするようにクライアントログを有効にします。http:///hc.apache.org/httpcomponents-client-ga/logging.html –

関連する問題