2015-02-08 163 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 

希望這有助於。

相關問題