urllib2.urlopen()缓存内容吗?

Sha*_*ane 13 python urllib2 urlopen

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

leo*_*luk 10

所以我想它确实在某处缓存了东西,对吧?

它没有.

如果您没有看到新数据,这可能有很多原因.出于性能原因,大多数较大的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,这意味着响应是新鲜的.


Chr*_*ris 5

很老的问题,但我有一个类似的问题,这个解决方案没有解决.
在我的情况下,我不得不像这样欺骗用户代理:

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

希望这有助于任何人......