Python urllib2: 在 HTTPError 异常期间读取内容主体?

我使用 urllib2通过 HTTP 获取页面。有时,当我的请求包含错误时,资源会抛出 HTTP 错误400(Bad Request)。但是,该响应还包含一个 XML 元素,该元素提供详细的错误消息。如果能够看到这个错误而不仅仅是 urllib2返回的 HTTPError 异常,那将非常方便。

尽管有异常,我如何返回文档内容?

29564 次浏览

您可以将错误视为响应。

Http://www.voidspace.org.uk/python/articles/urllib2.shtml#httperror

当服务器引发错误时 通过返回一个 HTTP 错误来响应 代码和一个错误页面 作为响应的 HTTPError 实例 这意味着 以及代码属性 已经读取,geturl,和信息,方法。

import urllib2
try:
request = urllib2.Request('http://www.somesite.com')
response = urllib2.urlopen(req)
except urllib2.HTTPError as e:
error_message = e.read()
print error_message

可以从 HTTPError 异常返回 read响应消息。

Python 3示例

import urllib.request


try:
request = urllib.request.Request('http://httpstat.us/418', headers={'Accept': 'text/plain', 'User-Agent': ''})
with urllib.request.urlopen(request) as page:
print('success: ' + page.read().decode())
except urllib.error.HTTPError as httpError:
error = httpError.read().decode()
print('error: ' + error)