Tôi có một trang web đơn giản mà tôi đang thử nghiệm. Nó đang chạy trên localhost và tôi có thể truy cập nó trong trình duyệt web của tôi. Trang chỉ mục đơn giản là từ "đang chạy". urllib.urlopen
sẽ đọc thành công trang nhưng urllib2.urlopen
thì không. Dưới đây là một kịch bản mà chứng tỏ vấn đề (đây là kịch bản thực tế và không phải là một việc đơn giản hóa của một kịch bản thử nghiệm khác nhau):urllib.urlopen hoạt động nhưng urllib2.urlopen không
import urllib, urllib2
print urllib.urlopen("http://127.0.0.1").read() # prints "running"
print urllib2.urlopen("http://127.0.0.1").read() # throws an exception
Dưới đây là stack trace:
Traceback (most recent call last):
File "urltest.py", line 5, in <module>
print urllib2.urlopen("http://127.0.0.1").read()
File "C:\Python25\lib\urllib2.py", line 121, in urlopen
return _opener.open(url, data)
File "C:\Python25\lib\urllib2.py", line 380, in open
response = meth(req, response)
File "C:\Python25\lib\urllib2.py", line 491, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python25\lib\urllib2.py", line 412, in error
result = self._call_chain(*args)
File "C:\Python25\lib\urllib2.py", line 353, in _call_chain
result = func(*args)
File "C:\Python25\lib\urllib2.py", line 575, in http_error_302
return self.parent.open(new)
File "C:\Python25\lib\urllib2.py", line 380, in open
response = meth(req, response)
File "C:\Python25\lib\urllib2.py", line 491, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python25\lib\urllib2.py", line 418, in error
return self._call_chain(*args)
File "C:\Python25\lib\urllib2.py", line 353, in _call_chain
result = func(*args)
File "C:\Python25\lib\urllib2.py", line 499, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 504: Gateway Timeout
Bất kỳ ý tưởng? Tôi có thể sẽ cần một số tính năng nâng cao hơn của urllib2
, vì vậy tôi không muốn chỉ sử dụng urllib
, cộng với tôi muốn hiểu vấn đề này.
Điều này khắc phục được vấn đề, mặc dù tôi không biết tại sao nó lại sử dụng proxy, vì kịch bản của tôi chỉ dài ba dòng và tôi không có biến môi trường biểu thị bất cứ điều gì về proxy. Tuy nhiên, rất tốt để giải quyết vấn đề này, vì vậy cảm ơn vì sự giúp đỡ. –
Ví dụ OpenerDirector không có thuộc tính 'urlopen' - bạn cần phải thay đổi đoạn ở trên thành opener.open (... – ryan