2013-05-24 3 views
8

feedparser 및 etags를 사용하여 수정되지 않은 RSS 피드는 건너 뛰려고합니다. http://pythonhosted.org/feedparser/http-etag.htmlPython : feedparser 및 etags를 사용하여 RSS 업데이트를 확인하는 방법

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 

이 출력 :

200 

이 스크립트는 304을 반환하지해야 문서의 지침에 따라? 필자의 이해로 RSS 피드가 업데이트되면 etag 변경이 발생하고 304와 일치해야합니다.

어떻게하면 예상 한 결과를 얻지 못합니까?

+1

내 컴퓨터에서 재생산 할 수 없습니다. 파이썬 2.6에서 feedparser-5.1.3을 사용하는'304'를 얻었습니다. – RedBaron

+0

데비안 6에서 파이썬 2.6과 feedparser-5.1.3도 사용하고 있습니다. – Marc

+0

아! 아마도 내 조직의 프록시가 캐싱을하므로 문제가 보이지 않을 것입니다. – RedBaron

답변

16

분명히이 서버는 '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 
+0

수정 된 헤더와 함께 작동한다는 것은 맞습니다. 그러나이 경우 완전히 etag을 꺼낼 수 있고 304를 반환합니다. 이 경우에는 etag 헤더가 있고 수정 된 헤더가없는 피드가 꽤 많이 있지만 작동합니다. Etags가 작동하지 않는 이유가 있습니까? 요청을하는 내 서버와 관련이있을 수 있습니까? – Marc

+2

Etag 및 마지막으로 수정 된 헤더는 두 가지 독립적 인 캐싱 기술입니다. 일부 서버는 그 중 하나를 사용하고, 일부는 둘 다 사용할 수도 있습니다. 모든 서버에 대한 캐싱을 지원하려면 브라우저의 표준 동작을 에뮬레이션해야합니다. 최신 브라우저는 etag 및 if-modified-since 헤더를 보내므로 동일한 작업을 수행해야합니다. –