urllib/urllib2 返回的错误代码和实际页面

6 投票
2 回答
6096 浏览
提问于 2025-04-15 16:25

urllib和urllib2的正常工作方式是,如果响应的头部中发送了错误代码(比如404),就会抛出一个异常。

那么,如何根据不同的错误代码(比如40x或50x)来处理不同的事情呢?另外,怎么读取实际返回的数据,比如HTML或JSON等(这些数据通常包含错误的详细信息,而不是仅仅是HTML的错误代码)?

2 个回答

1

urllib2 中,HTTPError 这个错误其实也是一种有效的HTTP响应。所以你可以把HTTP错误当作一种特殊情况来处理,也可以当作正常的响应来对待。不过在 urllib 中,你需要创建一个新的类,继承自 URLopener,并且定义 http_error_<code> 方法,或者重新定义 http_error_default 方法,来处理所有的错误。

10

当发生HTTP错误时,urllib2会抛出一个HTTPError错误。你可以通过异常对象上的code来获取响应代码。要获取响应数据,可以使用read()方法:

>>> req = urllib2.Request('http://www.python.org/fish.html')
>>> try:
>>>     urllib2.urlopen(req)
>>> except urllib2.HTTPError, e:
>>>     print e.code
>>>     print e.read()
>>>
404
<actual data response will be here>

撰写回答