他們沒有在python文檔中提到這一點。最近我正在測試一個網站,只是使用urllib2.urlopen()來提取某些內容,而我更新網站時會注意到urllib2.urlopen()似乎不會獲得新添加的內容。所以我不知道它在什麼地方緩存東西,對吧?是否urllib2.urlopen()緩存內容?
回答
所以我不知道它緩存的東西在某個地方,對吧?
它沒有。
如果您沒有看到新的數據,這可能有很多原因。出於性能原因,大多數較大的Web服務都使用服務器端緩存,例如使用Varnish和Squid之類的緩存代理或應用程序級緩存。
如果問題是由服務器端緩存導致的,通常無法強制服務器爲您提供最新數據。
對於像squid這樣的高速緩存代理,事情是不同的。通常,魷魚會在HTTP響應中添加一些額外的標頭(response().info().headers
)。
如果您看到名爲X-Cache
或X-Cache-Lookup
的標題字段,這意味着您沒有直接連接到遠程服務器,而是通過透明代理。
如果你有類似的東西:X-Cache: HIT from proxy.domain.tld
,這意味着你得到的響應被緩存。相反的是X-Cache MISS from proxy.domain.tld
,這意味着響應是新鮮的。
謝謝,現在我知道問題是什麼。 – Shane 2010-08-27 17:46:55
我很難相信urllib2沒有做緩存,因爲在我的情況下,重新啓動程序後數據會刷新。如果程序沒有重新啓動,數據似乎永遠被緩存。從Firefox中檢索相同的數據也不會返回陳舊的數據。
urllib2不會執行緩存。也許你正在使用代理,或者Web應用程序本身正在存儲臨時數據。 – 2010-10-14 19:45:46
非常古老的問題,但我有一個類似的問題,這個解決方案沒有解決。
在我而言,我不得不欺騙用戶代理是這樣的:
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0')
content = urllib2.build_opener().open(request)
希望這有助於任何人......
謝謝!從Drupal Feed下載JSON時遇到同樣的問題。這可能與您的實際python腳本沒有任何關係,而是您要從中下載數據的服務器。在我們的例子中,服務器緩存基於用戶代理的內容。 – 2016-06-03 21:26:24
你的Web服務器或HTTP代理可緩存內容。您可以嘗試通過添加Pragma: no-cache
請求頭禁用緩存:
request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)
如果進行了更改,並從瀏覽器,並從urllib的測試行爲,很容易做出愚蠢的錯誤。 在瀏覽器中您已登錄,但在urllib.urlopen中,您的應用可以將您始終重定向到相同的登錄頁面,因此如果您只是看到頁面大小或常見佈局的頂部,則可以認爲您的更改沒有效果。
- 1. 內容中缺少urllib2.urlopen()
- 2. 無緩衝urllib2.urlopen
- 3. 修改頁面內容由urllib2.urlopen
- 4. 404錯誤urllib2.urlopen()
- 5. MinGW是否緩存Windows目錄內容?
- 6. urllib.urlopen工程,但urllib2.urlopen不
- 7. 「urllib2.urlopen」添加主機頭
- 8. Python:用SIGTERM打斷urllib2.urlopen()
- 9. 的urllib2的urlopen HTML不全
- 10. Urllib2.urlopen並要求凍結
- 11. urllib2.urlopen虛線和點urlerror
- 12. urllib2.urlopen('你')給出錯誤
- 13. urllib2.urlopen在Django中失敗
- 14. 的Python urllib2.urlopen在URL
- 15. 緩存內容
- 16. ASP內容緩存
- 17. python:不能使用urlopen!從urllib,urllib2,clientcookie urlopen ssl錯誤
- 18. 緩存,避免緩存內容
- 19. 蟒蛇urllib2.urlopen(URL)過程塊
- 20. 如何在url中處理urllib2.urlopen?
- 21. Python - 線程和urlopen(urllib2)和解析
- 22. urllib2.urlopen()返回不同的結果
- 23. 蟒蛇的urllib2的urlopen響應
- 24. 如何重試urllib2.urlopen n次
- 25. Ubuntu 10.10上的奇怪urllib2.urlopen()行爲
- 26. urllib2 urlopen非常隨機地工作
- 27. 爲什麼我無法使用urllib2.urlopen()
- 28. Python urllib2和urlopen使用utf-8標誌
- 29. 與Python檢測掛起urllib2.urlopen
- 30. 找插座urllib2.urlopen返回值HTTP
Web服務器也緩存一些東西。這是通常的罪魁禍首。檢查結果上的標題,並**更新**你的問題以包含'info()'。 – 2010-08-27 16:45:57
@ S.Lott:「Web服務器緩存內容」是否意味着如果我沒有使用urllib2.urlopen()獲取更新後的結果,那主要是Web服務器「知道」這是我令人耳目一新的,不要給我更新東東?每當我刷新網站時,是否有辦法強制服務器重新傳輸數據? – Shane 2010-08-27 16:54:59
除非您知道有關Web服務器的許多**,否則您並不知道它具有什麼緩存。它可以有多個級別的緩存。它可能配置不正確的緩存。它可能有頁面不提供刷新緩存的信息。服務器端可能會出錯。 – 2010-08-27 17:07:01