2015-02-08 113 views
0

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

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' 

回答

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 

希望这有助于。

相关问题