2013-05-27 97 views
0


我正在GAE上開發一個應用程序,該應用程序提取網頁並搜索鏈接。
此頁面每天早上都會更新,因此每15分鐘每天早上執行一次cron作業幾個小時,以獲取當天的頁面。
每天更新下載頁面的問題每天更新

這裏的問題:如果在cron作業的第一執行應用程序找到舊的頁面(昨日的一個),它使獲取的那一個,但一個新的頁面可在同一網址。
似乎在某處使用緩存,但我無法禁用它。

應用程序使用下載頁面的代碼是簡單的Java I/O:

InputStream input = null; 
    ByteArrayOutputStream output = null; 
    HttpURLConnection conn = null; 
    URL url = new URL("http://www.page.url.net"); 
    try { 
     conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(0); 
     conn.setUseCaches(false); 
     int httpResponseCode = conn.getResponseCode(); 
     if (httpResponseCode == HttpURLConnection.HTTP_OK) { 
      input = conn.getInputStream(); 
      output = writeByteArrayOutputStreamFromInputStream(input); 
     } else { 
      throw new IOException("response code " + httpResponseCode); 
     } 
    } finally { 
     if (input != null) { 
      output.close(); 
      conn.disconnect(); 
     } 
    } 

有什麼不對?

回答

0

爲了避免緩存,我建議用這個簡單的一招:「假」的查詢參數添加到查詢字符串的結尾,例如,如果你正在抓取的網頁是

http://www.page.url.net

添加一個名爲虛擬參數=這樣的URL變成:

http://www.page.url.net?dummy=2013-05-25

只要確保「虛擬」 paramater實際上不是由遠程服務器解釋。

希望這會有所幫助。

+0

該技巧的作品。你能解釋我爲什麼嗎? – aleric

+0

好吧,因爲緩存使用完整的uri作爲緩存資源的「關鍵」。所以如果你添加一個虛擬查詢參數,你實際上正在模擬所請求的資源總是不同的,所以緩存總是會丟失。 – previ