接口的測試中,經常會遇到客戶端向服務端發送一個請求,服務端返回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
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!
十一中秋節,我們在民和七裡寺花海等你哦!
,
2023-06-18