3

httpclient.execute(request)を使用して、同じURLに対して複数のリクエストを実行します。連続したリクエストに接続を再利用できますか?HttpClientを何度も宣言せずにコードを最適化するにはどうすればよいですか。

for(int i=0;i<=50;i++)
{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("my_url");
HttpResponse response = client.execute(request);
System.out.println(response.getStatusLine().getStatusCode());
}
4

2 に答える 2

8

コードで単一のクライアントを使用するには(HttpRequest.execute()を使用した例外に基づく:SingleClientConnManagerの無効な使用:接続はまだ割り当てられており、Lars Vogel Apache HttpClient-チュートリアル):

  • 手順1.クライアント世代をの外に移動しますfor-loop
  • ステップ2.応答の内容を読み、ストリームを閉じる必要があります。これを行わないと、次の例外が発生します

    Exception in thread "main" java.lang.IllegalStateException: 
        Invalid use of SingleClientConnManager: connection still allocated.
    

コード内:

//step 1
HttpClient client = new DefaultHttpClient();
for(int i=0;i<=50;i++) {
    HttpGet request = new HttpGet("my_url");
    HttpResponse response = client.execute(request);
    System.out.println(response.getStatusLine().getStatusCode());
    //step 2
    BufferedReader br = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent()));
    //since you won't use the response content, just close the stream
    br.close();
}
于 2013-02-27T06:59:56.030 に答える
0

以下をお試しください。

HttpUriRequest httpGet = new HttpGet(uri);
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
HttpResponse httpResponse = defaultHttpClient.execute(httpGet);
于 2013-02-27T06:53:52.893 に答える