2011-07-20 108 views
0

我正在用Python編寫一個腳本,它應該確定它是否具有Internet訪問權限。Python urllib緩存

import urllib 

CHECK_PAGE  = "http://64.37.51.146/check.txt" 
CHECK_VALUE = "true\n" 
PROXY_VALUE = "Privoxy" 
OFFLINE_VALUE = "" 

page = urllib.urlopen(CHECK_PAGE) 
response = page.read() 
page.close() 

if response.find(PROXY_VALUE) != -1: 
    urllib.getproxies = lambda x = None: {} 
    page = urllib.urlopen(CHECK_PAGE) 
    response = page.read() 
    page.close() 

if response != CHECK_VALUE: 
    print "'" + response + "' != '" + CHECK_VALUE + "'" # 
else: 
    print "You are online!" 

我在我的電腦上使用了一個代理,所以正確的代理處理很重要。如果它無法通過代理連接到互聯網,它應該繞過代理並查看它是否卡在登錄頁面(我使用的許多公共熱點都是這樣)。使用該代碼,如果我沒有連接到互聯網,則第一個read()將返回代理的錯誤頁面。但是當我在那之後繞過代理時,我得到了相同的頁面。如果我在提出任何請求之前繞過代理服務器,我會收到像我應該的錯誤。我認爲Python是第一次緩存頁面。

我該如何強制Python清除它的緩存(或者這是一些其他問題)?

+0

考慮使用urllib2 - http://docs.python.org/library/urllib2.html#urllib2.urlopen – gimel

回答

0

你想

page = urllib.urlopen(CHECK_PAGE, proxies={}) 

取出

urllib.getproxies = lambda x = None: {} 

線。

2

每次調用urllib.urlopen()之前調用urllib.urlcleanup()都會解決問題。實際上,urllib.urlopen將調用urlretrive()函數,該函數創建一個用於保存數據的緩存,而urlcleanup()將刪除它。