2011-07-20 10 views
0

私は、インターネットにアクセスできるかどうかを判断するスクリプトをPythonで書いています。Python urllib cache

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が1回目からページをキャッシュしていると思います。

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()はそれを削除します。

関連する問題