0

Java では、応答を待たずに 5 秒ごとに HttpPost を送信したいと考えています。どうやってやるの?

次のコードを使用します。

HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
StringEntity params = new StringEntity(json.toString() + "\n");
post.addHeader("content-type", "application/json");
post.setEntity(params);
httpClient.execute(post);

Thread.sleep(5000);

httpClient.execute(post);

しかし、それは機能しません。

前の接続を失い、2 番目の送信用に新しい接続をセットアップしても、2 番目の実行機能は常にブロックされます。

4

3 に答える 3

3

あなたの質問には多くの質問が残りますが、その基本的なポイントは次の方法で達成できます。

while(true){ //process executes infinitely. Replace with your own condition

  Thread.sleep(5000); // wait five seconds
  httpClient.execute(post); //execute your request

}
于 2013-07-05T00:57:58.940 に答える
1

私はあなたのコードを試してみましたが、例外が発生しました: java.lang.IllegalStateException: BasicClientConnManager の無効な使用: 接続がまだ割り当てられています。別の接続を割り当てる前に、必ず接続を解放してください。

この例外はすでにHttpClient 4.0.1 に記録されています - 接続を解放するには?

次のコードで応答を消費することで、接続を解放できました。

public void sendMultipleRequests() throws ClientProtocolException, IOException, InterruptedException {
    HttpClient httpClient = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://www.google.com");
    HttpResponse response = httpClient.execute(post);

    HttpEntity entity = response.getEntity();
    EntityUtils.consume(entity);

    Thread.sleep(5000);

    response = httpClient.execute(post);
    entity = response.getEntity();
    EntityUtils.consume(entity);
}
于 2013-07-05T01:57:10.743 に答える