我正在用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!"
我在计算机上使用代理,因此正确的代理处理非常重要。如果它无法通过代理连接到互联网,它应该绕过代理并查看它是否卡在登录页面(我使用的许多公共热点)。使用该代码,如果我没有连接到互联网,第一个read()将返回代理的错误页面。但是当我在那之后绕过代理时,我得到了相同的页面。如果我在发出任何请求之前绕过代理,我会得到一个像我应该的错误。我认为Python从第一次开始就是在缓存页面。
如何强制Python清除其缓存(或者这是其他问题)?
答案 0 :(得分:2)
在每次调用urllib.urlopen()之前调用urllib.urlcleanup()来解决问题。实际上,urllib.urlopen将调用urlretrive()函数,该函数创建一个缓存来保存数据,而urlcleanup()将删除它。
答案 1 :(得分:0)
你想要
page = urllib.urlopen(CHECK_PAGE, proxies={})
删除
urllib.getproxies = lambda x = None: {}
线。