2011-03-11 76 views
0

我寫了一個Java程序,它從網頁中刪除了一些內容。它通過每隔幾秒調用readWebPage方法來檢索內容。我遇到的問題是隻有第一次閱讀實際上有效。在第一次閱讀網頁後,InputStream總是顯示爲空(in.ready()返回false)。如何反覆讀取HttpURLConnection?

而且,conn.getContentLength()每次都會返回相同的值,即使頁面上的內容已更改。如果我重新啓動程序,新內容將被正確提取。

我錯過了什麼?我需要在conn對象上執行某種刷新嗎?

private String readWebpage(HttpURLConnection conn) throws IOException{ 
      conn.connect(); 
      InputStreamReader in = new InputStreamReader((InputStream) conn.getContent()); 
      BufferedReader buffer = new BufferedReader(in); 
      StringBuilder b = new StringBuilder(conn.getContentLength()+5); 
      String line; 
      while ((line=buffer.readLine())!=null){ 
       b.append(line); 
      } 
      in.close(); 
      buffer.close(); 
      return b.toString(); 
    } 
+0

一旦完成,你是否總是關閉你的Http連接? – 2011-03-11 21:02:53

+0

一旦我完成,我已經嘗試調用'conn.disconnect()',但它似乎沒有區別。 – 2011-03-11 21:06:06

回答

4

您是否每次都在傳遞相同的HttpURLConnection對象?如果是,那麼因爲InputStream與底層的HTTP連接相關聯,所以每次都會得到相同的InputStream,而不是考慮URL的新流。在將它傳遞給此方法之前,打開一個新的連接(URL#openConnection),您應該很好。

+0

謝謝,這解決了我的問題! – 2011-03-12 15:28:10

0

一旦你讀完整個屏幕,還有什麼可讀的?單個獲取或發佈消息不會導致從服務器進行多次傳輸。它發回一條消息,結束故事。

如果屏幕仍在更新,那麼(a)輸入未完成,或者(b)進一步的更新不是HTML,就像有一個小程序或Javascript函數正在與服務器交談或者這樣。

我認爲BufferedReader.readLine塊只要還有輸入,所以我不認爲它可能是(a)。如果情況是(b),閱讀更多HTML將無濟於事:這不會改變。