Python urllib 缓存

0 投票
2 回答
4452 浏览
提问于 2025-04-16 21:53

我正在用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: {}

线。

撰写回答