【问题标题】:Does urllib2.urlopen() cache stuff?urllib2.urlopen() 缓存东西吗?
【发布时间】:2011-04-04 22:01:52
【问题描述】:

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

【问题讨论】:

  • Web 服务器也会缓存内容。这是通常的罪魁祸首。检查结果的标题,然后更新您的问题以包含info()。
  • @S.Lott:“Web 服务器也缓存东西”这是否意味着如果我没有使用 urllib2.urlopen() 获得更新的结果,主要是 Web 服务器“知道”它让我耳目一新不要给我更新的东西?每次我刷新网站时,有没有办法强制服务器重新传输数据?
  • 除非您对网络服务器有很多的了解,否则您并不真正知道它有哪些缓存。它可以有多个级别的缓存。它可能配置不正确的缓存。它可能包含不提供刷新缓存信息的页面。服务器端可能会出错。
  • @S.Lott:非常感谢。所以 urllib2.urlopen() 本身不会在我的电脑端缓存东西,对吧?

标签: python urllib2 urlopen


【解决方案1】:

所以我想知道它会在某处缓存东西,对吧?

它没有。

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

如果问题是由服务器端缓存引起的,通常没有办法强制服务器给你最新的数据。


对于像 squid 这样的缓存代理,情况有所不同。通常,squid 会在 HTTP 响应 (response().info().headers) 中添加一些额外的标头。

如果您看到名为X-Cache 或X-Cache-Lookup 的标头字段,这意味着您没有直接连接到远程服务器,而是通过透明代理。

如果你有类似的东西:X-Cache: HIT from proxy.domain.tld,这意味着你得到的响应被缓存了。反面是X-Cache MISS from proxy.domain.tld,表示响应是新鲜的。

【讨论】:

  • 谢谢,现在我知道问题出在哪里了。
【解决方案2】:

非常老的问题,但我有一个类似的问题,这个解决方案没有解决。
就我而言,我不得不像这样欺骗 User-Agent:

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

希望这对任何人都有帮助...

【讨论】:

  • 谢谢!从 drupal 提要下载 JSON 时遇到同样的问题。这可能与您的实际 python 脚本无关,而是您从中下载数据的服务器。在我们的例子中,服务器基于用户代理缓存内容。
【解决方案3】:

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

request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)

【讨论】:

    【解决方案4】:

    如果您从浏览器和 urllib 进行更改并测试行为,很容易犯愚蠢的错误。 在浏览器中您已登录,但在 urllib.urlopen 您的应用程序可以始终将您重定向到相同的登录页面,因此如果您只看到页面大小或常见布局的顶部,您可能会认为您的更改没有效果。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • urllib2 不做缓存。也许您正在使用代理或 Web 应用程序本身正在存储临时数据。
      猜你喜欢
      • 2021-10-17
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2013-05-27
      • 2012-08-18
      • 2015-08-10
      • 2012-03-03
      相关资源
      最近更新 更多