2012-03-29 20 views
14

आरएसएस फ़ीड से एक लेख लाए जाने के लिए एक लिंक पर urrlib2.urlopen कॉलिंग के साथ पुनर्निर्देश निम्न त्रुटि की ओर जाता है:हैंडलिंग आरएसएस अजगर/urllib2

urllib2.HTTPError: HTTP Error 301: The HTTP server returned a redirect error tha t would lead to an infinite loop. The last 30x error message was: Moved Permanently

प्रलेखन के अनुसार, urllib2 रीडायरेक्ट का समर्थन करता है।

जावा पर समस्या सिर्फ

HttpURLConnection.setFollowRedirects(true);

मैं इसे कैसे अजगर के साथ हल कर सकते हैं फोन करके हल किया गया था?

अद्यतन

लिंक मैं के साथ समस्या हो रही है:

http://feeds.nytimes.com/click.phdo?i=8cd5af579b320b0bfd695ddcc344d96c

+0

पुनर्निर्देश डिफ़ॉल्ट रूप से चालू कर रहे हैं। फिर से त्रुटि संदेश पढ़ें। निर्धारित करने के लिए अगर यह एसटीडी-लिब आप की जाँच के लिए, यूआरएल की आपूर्ति करने के लिए होता है में कोई त्रुटि है। ध्यान दें, सर्वर भी भेजे गए उपयोगकर्ता-एजेंट के आधार पर अलग-अलग सामान वापस कर सकता है। – sleeplessnerd

+0

मैंने यूआरएल जोड़ा है। ऐसा लगता है कि 5 से अधिक रीडायरेक्ट हैं। लेकिन जावा उपयोगकर्ता के एजेंट जैसे अतिरिक्त सामान के बिना उनके साथ copes। [302 त्रुटि भले ही पृष्ठ मौजूद नहीं लौटने urllib2.urlopen अजगर] की – Alex

+0

संभावित डुप्लिकेट (http://stackoverflow.com/questions/4098702/python-urllib2-urlopen-returning-302-error-even-though-page-exists) – Krastanov

उत्तर

25

बाहर कर देता है आप कुकीज़ सक्षम करने के लिए की जरूरत है। कुकी पहले सेट करने के बाद पृष्ठ स्वयं ही रीडायरेक्ट करता है। चूंकि urllib2 डिफ़ॉल्ट रूप से कुकीज़ को संभाल नहीं करता है, इसलिए आपको इसे स्वयं करना होगा।

import urllib2 
import urllib 
from cookielib import CookieJar 

cj = CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
p = opener.open("http://feeds.nytimes.com/click.phdo?i=8cd5af579b320b0bfd695ddcc344d96c") 

print p.read() 
9

कुछ भी नहीं @ sleeplessnerd समाधान के साथ गलत है, लेकिन यह बहुत, बहुत थोड़ा और अधिक सुरुचिपूर्ण है:

import urllib2 
url = "http://stackoverflow.com/questions/9926023/handling-rss-redirects-with-python-urllib2" 
p = urllib2.build_opener(urllib2.HTTPCookieProcessor).open(url) 

print p.read() 

वास्तव में, आप CookieJar() समारोह के लिए इनलाइन प्रलेखन को देखो, तो यह अधिक या -less बताता है कि आप चीजों को इस तरह करना है:

You may not need to know about this class: try urllib2.build_opener(HTTPCookieProcessor).open(url)

+0

तो इस तरह से लागू किया cookiejar अनुवर्ती अनुरोधों के बीच साझा किया है? (HTTPCookieProcessor कुकीज़ के लिए एक सिंगलटन-कैश, या एक नया कुकी जार हर बार उपयोग करता है?) – owenfi