2011-07-20 63 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()将删除它。