重写 urllib2.HTTPError 或 urllib.error.HTTPError 并读取响应 HTML

我收到一个“ HTTP 错误500: 内部服务器错误”响应,但是我仍然想读取错误 HTML 中的数据。

对于 Python 2.6,我通常使用以下方法获取页面:

import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()

当我试图在失败的 URL 上使用它时,我得到了异常 urllib2.HTTPError:

urllib2.HTTPError: HTTP Error 500: Internal Server Error

在返回内部服务器错误的同时,我如何获取这些错误页面(有或没有 urllib2) ?

注意,对于 Python3,相应的异常是 urllib.error.HTTPError

47179 次浏览

如果你的意思是你想阅读500人的身体:

request = urllib2.Request(url, data, headers)
try:
resp = urllib2.urlopen(request)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()

在您的情况下,您不需要构建请求,只需要执行

try:
resp = urllib2.urlopen(url)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()

因此,不需要覆盖 urllib2.HTTPError,只需要处理异常。

HTTPError 是一个类似文件的对象。你可以抓住它,然后 read它的内容。

try:
resp = urllib2.urlopen(url)
contents = resp.read()
except urllib2.HTTPError, error:
contents = error.read()
alist=['http://someurl.com']


def testUrl():
errList=[]
for URL in alist:
try:
urllib2.urlopen(URL)
except urllib2.URLError, err:
(err.reason != 200)
errList.append(URL+" "+str(err.reason))
return URL+" "+str(err.reason)
return "".join(errList)


testUrl()