他们没有在python文档中提到这一点。最近我正在测试一个网站,只是使用urllib2.urlopen()来提取某些内容,而我更新网站时会注意到urllib2.urlopen()似乎不会获得新添加的内容。所以我不知道它在什么地方缓存东西,对吧?是否urllib2.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
,这意味着响应是新鲜的。
谢谢,现在我知道问题是什么。 – Shane 2010-08-27 17:46:55
我很难相信urllib2没有做缓存,因为在我的情况下,重新启动程序后数据会刷新。如果程序没有重新启动,数据似乎永远被缓存。从Firefox中检索相同的数据也不会返回陈旧的数据。
urllib2不会执行缓存。也许你正在使用代理,或者Web应用程序本身正在存储临时数据。 – 2010-10-14 19:45:46
非常古老的问题,但我有一个类似的问题,这个解决方案没有解决。
在我而言,我不得不欺骗用户代理是这样的:
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0')
content = urllib2.build_opener().open(request)
希望这有助于任何人......
谢谢!从Drupal Feed下载JSON时遇到同样的问题。这可能与您的实际python脚本没有任何关系,而是您要从中下载数据的服务器。在我们的例子中,服务器缓存基于用户代理的内容。 – 2016-06-03 21:26:24
你的Web服务器或HTTP代理可缓存内容。您可以尝试通过添加Pragma: no-cache
请求头禁用缓存:
request = urllib2.Request(url)
request.add_header('Pragma', 'no-cache')
content = urllib2.build_opener().open(request)
如果进行了更改,并从浏览器,并从urllib的测试行为,很容易做出愚蠢的错误。 在浏览器中您已登录,但在urllib.urlopen中,您的应用可以将您始终重定向到相同的登录页面,因此如果您只是看到页面大小或常见布局的顶部,则可以认为您的更改没有效果。
- 1. 内容中缺少urllib2.urlopen()
- 2. 无缓冲urllib2.urlopen
- 3. 修改页面内容由urllib2.urlopen
- 4. 404错误urllib2.urlopen()
- 5. MinGW是否缓存Windows目录内容?
- 6. urllib.urlopen工程,但urllib2.urlopen不
- 7. “urllib2.urlopen”添加主机头
- 8. Python:用SIGTERM打断urllib2.urlopen()
- 9. 的urllib2的urlopen HTML不全
- 10. Urllib2.urlopen并要求冻结
- 11. urllib2.urlopen虚线和点urlerror
- 12. urllib2.urlopen('你')给出错误
- 13. urllib2.urlopen在Django中失败
- 14. 的Python urllib2.urlopen在URL
- 15. 缓存内容
- 16. ASP内容缓存
- 17. python:不能使用urlopen!从urllib,urllib2,clientcookie urlopen ssl错误
- 18. 缓存,避免缓存内容
- 19. 蟒蛇urllib2.urlopen(URL)过程块
- 20. 如何在url中处理urllib2.urlopen?
- 21. Python - 线程和urlopen(urllib2)和解析
- 22. urllib2.urlopen()返回不同的结果
- 23. 蟒蛇的urllib2的urlopen响应
- 24. 如何重试urllib2.urlopen n次
- 25. Ubuntu 10.10上的奇怪urllib2.urlopen()行为
- 26. urllib2 urlopen非常随机地工作
- 27. 为什么我无法使用urllib2.urlopen()
- 28. Python urllib2和urlopen使用utf-8标志
- 29. 与Python检测挂起urllib2.urlopen
- 30. 找插座urllib2.urlopen返回值HTTP
Web服务器也缓存一些东西。这是通常的罪魁祸首。检查结果上的标题,并**更新**你的问题以包含'info()'。 – 2010-08-27 16:45:57
@ S.Lott:“Web服务器缓存内容”是否意味着如果我没有使用urllib2.urlopen()获取更新后的结果,那主要是Web服务器“知道”这是我令人耳目一新的,不要给我更新东东?每当我刷新网站时,是否有办法强制服务器重新传输数据? – Shane 2010-08-27 16:54:59
除非您知道有关Web服务器的许多**,否则您并不知道它具有什么缓存。它可以有多个级别的缓存。它可能配置不正确的缓存。它可能有页面不提供刷新缓存的信息。服务器端可能会出错。 – 2010-08-27 17:07:01