代码之家  ›  专栏  ›  技术社区  ›  Shane

urllib2.urlopen()是否缓存内容?

  •  12
  • Shane  · 技术社区  · 14 年前

    他们在python文档中没有提到这一点。最近我在测试一个网站,只是用urllib2.urlopen()刷新网站以提取某些内容,我注意到有时更新网站urllib2.urlopen()时似乎没有得到新添加的内容。所以我想知道它会把东西藏在什么地方,对吧?

    5 回复  |  直到 14 年前
        1
  •  10
  •   leoluk    9 年前

    所以我想知道它会把东西藏在什么地方,对吧?

    没有。

    如果你没有看到新的数据,这可能有很多原因。大多数大型web服务出于性能原因使用服务器端缓存,例如使用Varnish和Squid之类的缓存代理或应用程序级缓存。


    response().info().headers

    如果您看到一个名为 X-Cache X-Cache-Lookup ,这意味着您不是直接连接到远程服务器,而是通过透明代理连接到远程服务器。

    X-Cache: HIT from proxy.domain.tld ,这意味着您得到的响应被缓存。相反的是 X-Cache MISS from proxy.domain.tld ,这意味着反应是新鲜的。

        2
  •  5
  •   Chris    13 年前

    很老的问题,但我有一个类似的问题,这个解决方案没有解决。

    request = urllib2.Request(url)
    request.add_header('User-Agent', 'Mozilla/5.0')
    content = urllib2.build_opener().open(request)
    

        3
  •  1
  •   Luca    11 年前

    您的web服务器或HTTP代理可能正在缓存内容。您可以尝试通过添加 Pragma: no-cache 请求标头:

    request = urllib2.Request(url)
    request.add_header('Pragma', 'no-cache')
    content = urllib2.build_opener().open(request)
    
        4
  •  0
  •   mirek    9 年前

    如果在浏览器和urllib中进行更改并测试行为,很容易犯愚蠢的错误。

        5
  •  -2
  •   Carol    14 年前

    我发现很难相信urllib2不做缓存,因为在我的例子中,在程序重新启动时,数据被刷新。如果程序没有重新启动,数据将永远被缓存。从Firefox检索相同的数据也不会返回过时的数据。