पायथन में मैं Google जैसे बाहरी यूआरएल खोलने के लिए urllib2 (और urllib) का उपयोग कर सकता हूं। हालांकि, मैं स्थानीयहोस्ट यूआरएल खोलते समय मुद्दों को मार रहा हूं। मेरे पास पोर्ट 8280 पर एक पायथन SimpleHTTPServer चल रहा है जिसे मैं http://localhost:8280/ का सफलतापूर्वक उपयोग करने के लिए ब्राउज़ कर सकता हूं।पायथन urllib और urllib2 स्थानीयहोस्ट यूआरएल नहीं खोल रहा है?
python -m SimpleHTTPServer 8280
यह भी ध्यान देने योग्य बात है कि मैं उबंटू जो CNTLM हमारे कॉर्पोरेट वेब प्रॉक्सी के लिए प्रमाणीकरण को संभालने के लिए चल रहा है चल रहा हूँ के लायक है। इसलिए, wget वास्तव में स्थानीयहोस्ट के साथ काम नहीं करता है इसलिए मुझे नहीं लगता कि यह एक urllib मुद्दा है!
टेस्ट स्क्रिप्ट (test_urllib2.py):
import urllib2
print "Opening Google..."
google = urllib2.urlopen("http://www.google.com/")
print google.read(100)
print "Google opened."
print "Opening localhost..."
localhost = urllib2.urlopen("http://localhost:8280/")
print localhost.read(100)
print "localhost opened."
आउटपुट:
$ ./test_urllib2.py
Opening Google...
<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><
Google opened.
Opening localhost...
Traceback (most recent call last):
File "./test_urllib2.py", line 10, in <module>
localhost = urllib2.urlopen("http://localhost:8280/")
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.6/urllib2.py", line 429, in error
result = self._call_chain(*args)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 605, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
r = h.getresponse()
File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
response.begin()
File "/usr/lib/python2.6/httplib.py", line 391, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine
समाधान: क्योंकि मैं हमारे कॉर्पोरेट वेब प्रॉक्सी के पीछे CNTLM उपयोग कर रहा हूँ समस्या वास्तव में था (क्यों की बारीकियों इससे एक समस्या हुई जिससे मैं सुनिश्चित नहीं हो सकता)।
proxy_support = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy_support)
print opener.open("http://localhost:8380/").read(100)
धन्यवाद मुझे here ओर इशारा करते हुए के लिए loki2302 रहे हैं: समाधान ProxyHandler उपयोग करने के लिए किया गया था।
में पूछे गए किसी अन्य यूआरएल का उत्तर नहीं दे सकता है, बिना किसी अपवाद के ''को छोड़कर' का उपयोग न करें और कृपया हमें urlib2.urlopen' द्वारा उठाए गए अपवाद को दिखाएं। – mouad
http://stackoverflow.com/questions/201515/urllib-urlopen-works-but-urllib2-urlopen-doesnt – agibalov
'BadStatusLine' अपवाद सर्वर से एक विकृत प्रतिक्रिया शीर्षलेख सुझाता है। क्या आप एक चोटी देख सकते हैं और देख सकते हैं कि क्या लौटाया जा रहा है? –