Python urllib 缓存
我正在用Python写一个脚本,目的是判断我的电脑是否能上网。
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!"
我在电脑上使用了代理,所以正确处理代理非常重要。如果通过代理无法连接到互联网,脚本应该绕过代理,看看是否卡在登录页面上(因为我常用的很多公共热点都是这样的)。在这段代码中,如果我没有连接到互联网,第一次读取的结果会是代理的错误页面。但是当我之后绕过代理时,得到的还是同样的页面。如果我在发出任何请求之前就绕过代理,我会得到一个错误,这样是正常的。我觉得Python可能在缓存第一次读取的页面。
我该怎么做才能强制Python清除缓存(或者这是不是其他问题)?
2 个回答
3
在每次使用 urllib.urlopen() 之前调用 urllib.urlcleanup() 可以解决这个问题。其实,urllib.urlopen 会调用 urlretrieve() 这个函数,它会创建一个缓存来存放数据,而 urlcleanup() 则是用来清理这个缓存的。
0
你想要
page = urllib.urlopen(CHECK_PAGE, proxies={})
删除这条
urllib.getproxies = lambda x = None: {}
线。