2013-04-09 193 views
9

下面的代碼:500錯誤與urllib.request.urlopen

req = urllib.request.Request(url=r"http://borel.slu.edu/cgi-bin/cc.cgi?foirm_ionchur=im&foirm=Seol&hits=1&format=xml",headers={'User-Agent':' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'}) 
    handler = urllib.request.urlopen(req) 

是給我以下異常:

Traceback (most recent call last): 
    File "C:/Users/Foo/lang/old/test.py", line 46, in <module> 
    rip() 
    File "C:/Users/Foo/lang/old/test.py", line 36, in rip 
    handler = urllib.request.urlopen(req) 
    File "C:\Python32\lib\urllib\request.py", line 138, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\Python32\lib\urllib\request.py", line 375, in open 
    response = meth(req, response) 
    File "C:\Python32\lib\urllib\request.py", line 487, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "C:\Python32\lib\urllib\request.py", line 413, in error 
    return self._call_chain(*args) 
    File "C:\Python32\lib\urllib\request.py", line 347, in _call_chain 
    result = func(*args) 
    File "C:\Python32\lib\urllib\request.py", line 495, in http_error_default 
    raise HTTPError(req.full_url, code, msg, hdrs, fp) 
urllib.error.HTTPError: HTTP Error 500: Internal Server Error 

,但它工作正常,在我的瀏覽器,什麼問題?

+2

有趣的是,如果你捕獲異常並調用'.read()'上,你看起來像一個成功的XML文檔響應。 – 2013-04-09 20:55:14

+2

它只是總是以狀態500回覆瀏覽器。 – 2013-04-09 20:57:18

回答

11

服務器相當b0rken。它在瀏覽器中也迴應了500錯誤。

您可以捕獲該異常,仍然讀取響應:

import urllib.request 
from urllib.error import HTTPError 

req = urllib.request.Request(url=r"http://borel.slu.edu/cgi-bin/cc.cgi?foirm_ionchur=im&foirm=Seol&hits=1&format=xml",headers={'User-Agent':' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'}) 
try: 
    handler = urllib.request.urlopen(req) 
except HTTPError as e: 
    content = e.read() 
+2

如果你和我一樣,並且沒有定義urllib.error的錯誤,而你實際上使用的是urllib2,請嘗試'從urllib2 import HTTPError' – streetlogics 2014-02-26 23:11:52