Python:如何使用feedparser和ETag检查RSS更新

Python:如何使用feedparser和ETag检查RSS更新,python,rss,http-headers,etag,feedparser,Python,Rss,Http Headers,Etag,Feedparser,我试图跳过没有使用feedparser和ETag修改的RSS提要。 遵循文件指南: 这将产生: 200 这个脚本不应该返回304吗? 我的理解是,当RSS提要得到更新时,etag会发生变化,如果它们匹配,那么我应该得到一个304 为什么我没有得到预期的结果?显然,此服务器配置为检查“If Modified Since”标题。您还需要通过上次修改的时间: >>> d = feedparser.parse('http://www.wired.com/wiredscience/fe

我试图跳过没有使用feedparser和ETag修改的RSS提要。 遵循文件指南:

这将产生:

200
这个脚本不应该返回304吗? 我的理解是,当RSS提要得到更新时,etag会发生变化,如果它们匹配,那么我应该得到一个304


为什么我没有得到预期的结果?

显然,此服务器配置为检查“If Modified Since”标题。您还需要通过上次修改的时间:

>>> d = feedparser.parse('http://www.wired.com/wiredscience/feed/')
>>> feedparser.parse('http://www.wired.com/wiredscience/feed/', 
                     etag=d.etag, modified=d.modified).status
304
>>> feedparser.parse('http://www.wired.com/wiredscience/feed/', 
                     etag=d.etag).status
200

无法在我的机器上复制它。我在Python2.6I上使用feedparser-5.1.3得到了一个
304
,我还在Debian6Ah上使用Python2.6和feedparser-5.1.3!可能是我所在组织的代理进行了一些缓存,因此我看不到问题所在。您说它与修改的头一起工作是正确的。但在这种情况下,您可以完全取出etag,它将返回304。尽管这样做有效,但有相当多的提要具有etag头,并且没有修改的头。ETAG不工作有什么原因吗?它可能与发出请求的服务器有关吗?Etag和last modified Header是两种独立的缓存技术。有些服务器使用其中一个,有些可能同时使用两个。如果您想支持所有服务器的缓存,那么应该模拟浏览器的标准行为。现代浏览器同时发送etag和if-modified-since头,因此您也应该这样做。
>>> d = feedparser.parse('http://www.wired.com/wiredscience/feed/')
>>> feedparser.parse('http://www.wired.com/wiredscience/feed/', 
                     etag=d.etag, modified=d.modified).status
304
>>> feedparser.parse('http://www.wired.com/wiredscience/feed/', 
                     etag=d.etag).status
200