【问题标题】:Python urllib cachePython urllib 缓存
【发布时间】:2011-07-20 04:53:23
【问题描述】:

我正在用 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 清除其缓存(或者这是其他问题)?

【问题讨论】:

标签: python urllib


【解决方案1】:

在每次调用 urllib.urlopen() 之前调用 urllib.urlcleanup() 将解决问题。实际上,urllib.urlopen 会调用 urlretrive() 函数创建一个缓存来保存数据,然后 urlcleanup() 会删除它。

【讨论】:

    【解决方案2】:

    你想要的

    page = urllib.urlopen(CHECK_PAGE, proxies={})
    

    删除

    urllib.getproxies = lambda x = None: {}
    

    行。

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 2016-02-14
      相关资源
      最近更新 更多