python,当http响应为None时,如何获取响应代码

时间:2015-02-08 14:13:43

标签: python http

在python中,当http请求无效时,响应为None,在这种情况下,如何从响应中获取响应代码?我的代码中的无效请求是由两个原因引起的,一个是无效的令牌,我希望在这种情况下得到401,另一个原因是无效的参数,在这种情况下我希望得到400,但在这两种情况下,响应始终为无,我无法通过调用response.getcode()来获取响应代码,如何解决此问题?

req = urllib2.Request(url)
response = None
try: response = urllib2.urlopen(req)
except urllib2.URLError as e:
    res_code = response.getcode() #AttributeError: 'NoneType' object has no attribute 'getcode'

1 个答案:

答案 0 :(得分:2)

引发URLError时,您无法获取状态代码。因为当它被引发时(例如:DNS无法解析域名),这意味着请求尚未发送到服务器,因此没有生成HTTP响应。

在您的方案中,(对于4xx HTTP状态代码),urllib2会抛出HTTPError,以便您可以从中获取状态代码。

documentation说:

  

<强>码

     

RFC 2616 中定义的HTTP状态代码。此数值对应于 BaseHTTPServer.BaseHTTPRequestHandler.responses 中的代码字典中找到的值。


import urllib2

request = urllib2.Request(url)
try: 
    response = urllib2.urlopen(request)
    res_code = response.code
except urllib2.HTTPError as e:
    res_code = e.code

希望这有帮助。