401的錯誤分析


在接口的測試中,經常會遇到客戶端向服務端發送一個請求,服務端返回401的錯誤,那么今天本文章就來說明在接口測試中如何分析以及解決該問題。

我們知道在HTTP返回的狀態碼中,401錯誤表示的是被請求的頁面需要用戶名和密碼。401的錯誤詳細的可以描述為:客戶端發送請求抖到服務端,頁面需要驗證服務端會返回401的錯誤,見如下的錯誤信息:

401 UNAUTHORIZED

Headers

Content-Type: application/jsonWWW-Authenticate: Basic realm="Authentication Required"Content-Length: 37Server: Werkzeug/0.11.13 Python/2.7.12Date: Wed, 14 Mar 2018 14:57:24 GMT
{  "error": "Unauthorized access"}

 

依據錯誤的信息可以獲取到,發送的請求需要有通過HTTP的認證的認證信息,如果在瀏覽器中訪問,會直接彈出需要輸入用戶名和密碼的彈出框,見截圖:

 

 

那么在HTTP的認證中,經常會被使用到認證方式分別是BASIC認證和DIGEST認證,我們具體來看BASIC的認證方式是一種流行,行業標准的身份驗證方式,是在HTTP1.0中指定。主要是指使用用戶ID和密碼使用Base64編碼標准進行編碼,並通過HTTP進行傳屬,只有當用戶ID和密碼有效時,服務器才允許用戶訪問。

在我們的案例中,使用的認證方式是BASIC的認證方式,那么在客戶端向服務端發送請求的時候,帶上用戶信息,再次請求可以成功。在postman中的Basic auth指定用戶名和密碼,見請求成功的信息:

Response (20.345s) - http://localhost:5000/hotel/username/

200 OK

Headers

Content-Type: application/jsonContent-Length: 308Server: Werkzeug/0.11.13 Python/2.7.12Date: Wed, 14 Mar 2018 15:09:33 GMT

 

{  "datas": 
  [
    {      
       "check in": "2018-03-08 08:20:10",      
       "check out": "2018-03-09 14:00:00",      
       "identity card": "23012919950425723X",      
       "phone": "13484545190",      
        "room number": "1104",      
        "userid": 1,      
        "username": "李四",      
        "vpl": "京AJ3585"
    }
  ]
}

當然我們也可以使用requests輕松的解決這部分,見實現的代碼:

#!/usr/bin/env python
#-*-coding:utf-8-*-

import  requests

r=requests.get(
   'http://localhost:5000/hotel/username/',
   auth=('wuya','admin'))
print r.text

或者直接指定HTTPBasic,見修改后的代碼:

#!/usr/bin/env python 
#-*-coding:utf-8-*-

import  requests
from requests.auth import  HTTPBasicAuth

r=requests.get(
   'http://localhost:5000/hotel/username/',
   auth=HTTPBasicAuth('wuya','admin'))
print r.text

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM