2014-07-03 67 views
0

我的Web服務器在對其進行REST調用時發送一些信息。我想不斷地輪詢這個服務器(間隔5秒鐘後重復發送HTTP GET請求),以檢查返回的信息是否有任何改變。 什麼是最有效的方法來做到這一點? 您能否提供一些代碼示例?在java中查詢Http服務器(重複發送http get請求)

請注意,我只想開發客戶端代碼。

我一直在使用Java的Timer類如下嘗試 -

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

我不知道這是否是一種有效的方法。

+1

你到目前爲止嘗試過什麼?你想要它作爲前端代碼嗎?你有沒有試過websockets?它需要成爲REST嗎? –

+0

@TassosBassoukos - 我更新了我的問題。你會在那裏找到所需的信息。另外,我無法與服務器進行任何操作。我必須使用REST API。 –

回答

3

使用ApacheHttpClient或任何其他REST客戶端框架(如Jersey,RestEasy等)來調用REST服務。

但在這裏我用ApacheHttpClient調用REST服務,並得到響應,字符串

注:閱讀有關的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); 

希望它能幫助!

2

那麼,我不會寫代碼,但我會告訴你爲你的請求使用條件頭。 If-None-Matches應發送給您最近的ETag,或者If-Modified-Since應發送給您最近的回覆的時間戳。這樣,如果沒有任何變化,你會得到一個304 Not Modified而不是整個請求體。它會節省服務器一段時間,這意味着更少的線路流量。你可以閱讀RFC 7232瞭解更多關於它們如何工作的信息。

請注意,大多數框架不支持條件標頭。無論誰擁有服務器,如果它不存在,可能必須編寫該代碼。

+0

你可以請分享鏈接到任何教程或與此相關的內容? –

+0

@ArchitArora你讀過RFC嗎? –