2016-08-18 9 views
1

ApacheのHttpClient 4.5.2を使用しようとしています。私はWildfly 10サーバーで動作しています。私は本当にorg.apache.http.client.fluent.Requestを使用したいと思います。コールは初めて機能します。ここでは、コードが初めて作品Proxy HttpClient 4.5.2(Request&HttpGet)は、プロキシとSSLの使用時に2番目の呼び出しで失敗します。

InputStream stream = null; 
try { 
    Request httpGetRequest = Request.get(queryUrl); 
    httpGetRequest.viaProxy(new HttpHost(httpsProxyHost, httpProxyPort.intValue())); 

    HttpResponse response = httpGetRequest.execute().returnResponse(); 

    stream = response.getEntity().getContent(); 
    //Process Stream.... 
} catch (Exception e) { 
    logger.error("Nope!. Try again", e); 
} finally { 
    try { 
     if (stream != null) { 
      stream.close(); 
     } 
    } catch (Exception e) { 
     logger.warn("Problem closing stream!", e); 
    } 
} 

次のようになります..しかし、私は注意することが重要Connection Timeout error..

を取得し二回目:プロキシスルーつもりはないとSSL(別のURLを、使用しない場合しかし同じコード)毎回動作します。

アイデア?

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

+0

答えはありませんが、[javax.ws.rs.client.Client](http://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client .html)これを行うためのAPI? –

答えて

0

私はあなたが物事を間違って閉じていると感じます。私はちょっと違うことをしますが、私はプロキシではなくSSLだけを使用することを認めます。私はHttpClientをクラスではなく、内部のInputStreamを閉じていることを確認しています。このように

try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { 
    HttpGet httpGet = new HttpGet(url); 

    try (CloseableHttpResponse response = httpClient.execute(httpGet)) { 
     InputStream stream = response.getEntity().getContent(); 

     // read as needed 
    } 
} 

:私のコードは次のように見えます。このコードではClosableインターフェイスを使用しているため、Java 1.5以上を使用する必要があります。

+0

おそらく、InputStream(と一般的なストリーム)を読む必要があります。 InputStreamを閉じることができない問題のいくつかは、ファイルハンドラを開いたままにしています。再利用しないでください(JVMが再起動されるまで)。あなたは本当に近い方法で何かを閉じるべきです。また、別のAPIを使用していることに注意してください。私は特に "org.apache.http.client.fluent.Request"について質問しています。しかし、ちょうどFYI、HttpClientでも同じことが起こります。私の最後にはもっとたくさんのコードがあります。 – wrgoff

+0

そのため、私はClosableインターフェイスを使用しています。コンパイラによって自動的にステートメントの最後に閉じられます。最終的にまたは明示的に閉じる必要はありません。おそらくあなたはリソースを試して読んでください:)私は最初に質問を誤解して申し訳ありません。 – stdunbar

+0

私はそれを理解しています(この場合、httpClientとレスポンスでストリームではなくストリームを閉じます)。これはJava 1.7で出てきました。しかし、Reponse openから作成されたInputStreamへのハンドルは残しています。これを読んでください.. http://stackoverflow.com/questions/22889075/do-unclosed-streams-cause-memory-leaks-in-java。近くのメソッドを持つオブジェクトを閉じるには、常に練習に行く...他になぜそれがあると思いますか? – wrgoff

関連する問題