urllib2.urlopen引发异常时捕获响应正文

时间:2020-06-04 06:54:27

标签: python python-2.7

我正在发布GET,并且正在收到503代码。

在Chrome调试器的“网络”标签中,我看到了代码和响应(这就是我要的内容)。

但是,通过Python进行此调用时,引发了HTTPError,我看到了错误代码,但是没有看到响应。

如何捕获通过浏览器得到的响应?

request = urllib2.Request(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'})
r = urllib2.urlopen(request,timeout=30)

1 个答案:

答案 0 :(得分:2)

documentation for urllib2.HTTPError说:

尽管HTTPException是一个异常(URLError的子类),但它也可以用作非异常的类似于文件的返回值(与urlopen()返回的结果相同)。

也就是说,如果您抓到HTTPError,则可以在其上呼叫.read()


request = urllib2.Request(url, ...)
try:
  r = urllib2.urlopen(request,timeout=30)
except urllib2.HTTPError as he:
  print(he.reason)
  print(he.read())
  raise

顺便说一句,

  • 您应该停止使用停产的Python 2.7并转而使用Python 3
  • requests library使处理HTTP的所有古怪之处和功能更加完善。