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

Mar*_*arc 11 python rss etag feedparser http-headers

我正在尝试跳过未使用feedparser和etags修改的RSS源.遵循文档指南:http://pythonhosted.org/feedparser/http-etag.html

import feedparser

d = feedparser.parse('http://www.wired.com/wiredscience/feed/')
d2 = feedparser.parse('http://www.wired.com/wiredscience/feed/', etag=d.etag)

print d2.status
Run Code Online (Sandbox Code Playgroud)

这输出:

200
Run Code Online (Sandbox Code Playgroud)

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

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

Pav*_*hov 18

显然,此服务器配置为检查"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
Run Code Online (Sandbox Code Playgroud)

  • Etag和最后修改的标头是两种独立的缓存技术.有些服务器使用其中一个,有些可能同时使用它们.如果要支持所有服务器的缓存,则应模拟浏览器的标准行为.现代浏览器同时发送etag和if-modified-since标头,因此您应该这样做. (4认同)