Java 如何每5秒发送一次HttpPost

Java 如何每5秒发送一次HttpPost,java,Java,在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"); p

在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);
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);
}
但它不起作用


即使我丢失了上一个连接并建立了一个新连接来发送第二个连接,第二个执行函数始终被阻止。

您的问题留下了一大堆问题,但基本要点可以通过以下方式实现:

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

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

}

您的问题留下了一大堆问题,但基本要点可以通过以下方式实现:

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

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

}

我尝试了您的代码,但出现了异常: java.lang.IllegalStateException:BasicClientConnManager的使用无效:仍在分配连接。 在分配另一个连接之前,请确保释放该连接

此异常已登录

我能够通过使用以下代码的响应来释放连接:

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);
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);
}

我尝试了您的代码,但出现了异常: java.lang.IllegalStateException:BasicClientConnManager的使用无效:仍在分配连接。 在分配另一个连接之前,请确保释放该连接

此异常已登录

我能够通过使用以下代码的响应来释放连接:

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);
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);
}

使用DefaultHttpClient是同步的,这意味着程序在等待响应时被阻塞。相反,您可以使用库来执行异步请求(如果您不熟悉Maven,可以从中下载jar文件)。示例代码可能如下所示:

import com.ning.http.client.*; //imports

try {
        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        while(true) {

            asyncHttpClient
                    .preparePost("http://your.url/")
                    .addParameter("postVariableName", "postVariableValue")
                    .execute(); // just execute request and ignore response

            System.out.println("Request sent");

            Thread.sleep(5000);
        }
    } catch (Exception e) {
        System.out.println("oops..." + e);
    }

使用DefaultHttpClient是同步的,这意味着程序在等待响应时被阻塞。相反,您可以使用库来执行异步请求(如果您不熟悉Maven,可以从中下载jar文件)。示例代码可能如下所示:

import com.ning.http.client.*; //imports

try {
        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();

        while(true) {

            asyncHttpClient
                    .preparePost("http://your.url/")
                    .addParameter("postVariableName", "postVariableValue")
                    .execute(); // just execute request and ignore response

            System.out.println("Request sent");

            Thread.sleep(5000);
        }
    } catch (Exception e) {
        System.out.println("oops..." + e);
    }

此代码是否在循环中?它不工作不是诊断。“阻塞”和“不工作”到底是什么意思?“阻塞”意味着“httpClient.execute(post)”将始终等待数据(或响应),如果没有,它将始终被阻塞,它不工作意味着--如果我像这样运行我的程序,我将获得异常:java.lang.IllegalStateException:BasicClient ConnManager的使用无效:连接仍已分配。在分配另一个连接之前,请确保释放该连接。此代码是否在循环中?它不工作不是诊断。“阻塞”和“不工作”到底是什么意思?“阻塞”意味着“httpClient.execute(post)”将始终等待数据(或响应),如果没有,它将始终被阻塞,它不工作意味着--如果我像这样运行我的程序,我将获得异常:java.lang.IllegalStateException:BasicClient ConnManager的使用无效:连接仍已分配。请确保在分配另一个连接之前释放连接。根据您的答复,如果服务器没有向我的HttpClient发送任何响应,代码“response=HttpClient.execute(post);”将始终被阻止,对吗?如果我不想被阻止,我该怎么办?有没有办法保持每5秒发布一次请求并忽略响应(可能没有响应从服务器发送回我)?根据您的回复,如果服务器没有向我的HttpClient发送任何响应,代码“response=HttpClient.execute(post);”将始终被阻止,正确的?如果我不想被阻止,我该怎么办?有没有办法保持每5秒发布一次请求并忽略响应(可能没有响应从服务器发送回我)?我想我必须在发送新请求之前释放以前的连接。但我不想使用“EntityUtils.consume(entity);”,因为如果服务器没有响应,它将始终被“httpClient.execute(post)”阻止。我想我必须在发送新请求之前释放以前的连接。但是我不想使用“EntityUtils.consume(entity);”,因为如果服务器没有响应,它将始终在“httpClient.execute(post)”中被阻止。我尝试了你的代码,但如果没有响应,下一个请求仍然会被阻止。你能发布你测试过的代码吗?它和我的代码完全一样吗?我在发布之前已经测试过了,一切都很好。你是如何得出程序执行被阻止的结论的?我尝试了你的代码,但如果没有响应,下一个请求仍然会被阻止。你能发布你测试过的代码吗?它和我的代码完全一样吗?我在发布之前已经测试过了,一切都很好。您如何得出程序执行被阻止的结论?