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

有帮助吗?

解决方案

所以我想知道它会在某个地方缓存东西,对吗?

不是。

如果您看不到新数据,则可能有很多原因。大多数较大的Web服务出于性能原因使用服务器端缓存,例如使用诸如Varnish和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, ,这意味着响应是新鲜的。

其他提示

非常古老的问题,但是我有一个类似的问题,该解决方案无法解决。
就我而言,我必须像这样欺骗用户代理:

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

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

您的Web服务器或HTTP代理可能是缓存内容。您可以尝试通过添加一个 Pragma: no-cache 请求标题:

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

如果您进行更改并测试浏览器和Urllib的行为,那么犯一个愚蠢的错误很容易。在浏览器中,您已登录,但是在urllib.urlopen中,您的应用程序可以将您始终重定向到同一登录页面,因此,如果您只看到页面大小或通用布局的顶部,则可以认为您的更改无效。

我发现很难相信Urllib2不会进行缓存,因为在我的情况下,在程序重新启动后,数据刷新了。如果程序未重新启动,则数据似乎永远被缓存。还从Firefox中检索相同的数据也永远不会返回过时的数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top