在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'
答案 0 :(得分:2)
引发URLError
时,您无法获取状态代码。因为当它被引发时(例如:DNS无法解析域名),这意味着请求尚未发送到服务器,因此没有生成HTTP响应。
在您的方案中,(对于4xx
HTTP状态代码),urllib2
会抛出HTTPError
,以便您可以从中获取状态代码。
<强>码强>
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
希望这有帮助。