urllib/urllib2 返回的错误代码和实际页面
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>