在java中轮询Http服务器(重复发送http get请求)

时间:2014-07-03 10:14:13

标签: java rest http

我的Web服务器在对其进行REST调用时发送一些信息。我想不断轮询这个服务器(在间隔5秒后重复发送HTTP GET请求)来检查返回的信息是否有任何变化。 最有效的方法是什么? 你能提供一些代码示例吗?

请注意,我只想开发客户端代码。

我尝试过使用java的Timer类,如下所示 -

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    public void run() {
        //send HTTP requests
    }
}, 0, 3000); 

我不确定这是否是一种有效的方式。

2 个答案:

答案 0 :(得分:3)

使用ApacheHttpClient或任何其他REST客户端框架(如Jersey,RestEasy等)来调用REST服务。

但是我在这里使用ApacheHttpClient来调用Rest服务并以String的形式获取响应

注意:了解HttpCore和HttpClient

Timer timer = new Timer();
timer.schedule(new TimerTask()
{
  public void run()
  {
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet("Your Rest URL");

    //add your headers if needed like this
    httpGet.setHeader("Content-type", "application/xml");
    httpGet.setHeader("Accept", "application/xml");

    HttpResponse response = client.execute(httpGet); 
    HttpEntity httpEntity = response.getEntity();

    //get response as String or what ever way you need
    String response = EntityUtils.toString(httpEntity);
  }
}, 0, 3000); 

希望它有所帮助!

答案 1 :(得分:2)

好吧,我不会写代码,但我会告诉你为你的请求使用条件头。应该使用您回来的最新If-None-Matches发送ETag,或者应该使用您最近回复的时间戳发送If-Modified-Since。这样,如果没有任何变化,您将返回304 Not Modified而不是整个请求正文。它将节省服务器一段时间,这意味着更少的线路流量。您可以阅读RFC 7232了解有关其工作原理的更多信息。

请注意,大多数框架不支持条件标头。拥有服务器的人可能必须编写该代码(如果该代码尚不存在)。