004、使用 postman 發起接口請求處理鑒權 , 用requests發起session、token 請求demo


 

一、使用 postman  發起接口請求處理鑒權

 

1、帶上Cookie發起請求,演示session鑒權

  測試用的網站(舊版本的課堂派,它用的是session鑒權) :https://v4.ketangpai.com/

先用火狐瀏覽器按 F12 抓包,如下:

 

用postman發起一個請求如下:

 

得到Cookie值如下:

 

用獲取到的cookies值,再發起一個是否為Vip會員的請求:

url:https://v4.ketangpai.com/VipApi/isVip

 

 

2、token 鑒權

演示網站:https://www.ketangpai.com

url: https://openapiv5.ketangpai.com/UserApi/login

請求方式:post

 請求數據:用火狐瀏覽器按 F12 抓包,如下:

 

從上面的截圖可以發現,我們發起第一次請求后,即返回了 cookie 也返回了 token ,當然這2種是可以同時返回的;后面再發起請求時會帶上第一次返回的 cookie 或者 token 值;

 

 

下面用 postman 模擬發起請求:

從瀏覽器種獲取登錄請求信息,直接拷貝。

 

 

 

用剛才獲取到的 tokon 再發起一個請求:

先用瀏覽器獲取所要的url 、請求方式 、請求數據格式、token,如下:

 

用 postman 發起的請求如下:

 

接下來用 代碼 發起請求:

 用requests 帶上cookie 發起session鑒權 的demo,test_session.py :

# -*- coding: utf-8 -*-
import json
import requests


# 以下代碼都是關於session 鑒權 # 創建一個session對象 ,用Session()的好處是,當第二次發起請求時,不需要再手動去獲取並帶上Sessionid,會自動帶上 ;
session = requests.Session()

# 接口地址
login_url = "https://v4.ketangpai.com/UserApi/login"
# 請求數據,密碼請自己注冊。
req_data = {
  "email": "1536*****",
  "password": "nmb153618*****",
  "remember": "0",
}

print('\n******** 第一次請求 *************')
# 第一次請求
# 以post 方式發起  第一個請求,返回一個 <class 'requests.models.Response'>
# 注意 post 里面關鍵字參數是用data 還是 json ,需要找開發確認,或者抓包分析 content-type 的數據類型
# 這個請求的content-type 的數據類型是:application/x-www-form-urlencoded; charset=UTF-8,所以建議用data關鍵子參數
response = session.post(login_url, data=req_data)
print(type(response))
# print(response.status_code)   # 獲取響應的狀態碼 200
# print(response.headers)       # 獲取響應頭
# print(response.cookies)       # 獲取響應cookies

print('==========把返回是json格式的response 轉換成字典 =============')

# 返回響應的json編碼內容(如果有)
# json() 方法的作用: 如果響應數據是 json 格式,可以用這個方法,返回字典;
dict_obj = response.json()
print(type(dict_obj))
print(dict_obj)

# print('\n==========把字典變成字符串,格式化輸出 =============')

# # 美化輸出 json 格式, 把unicode編碼轉中文
# # 把 dict_obj 轉換成字符串
# data_json = json.dumps(dict_obj, indent=2)
# print(type(data_json))
#
# # 把 unicode編碼 轉換成 uft-8
# data_json = data_json.encode('utf-8').decode('unicode_escape')
# print(data_json)

print('\n******** 第二次請求 *************')
# 第二次請求,不需要再手動帶 sessionID
is_vip_url = 'https://v4.ketangpai.com/VipApi/isVip'
response = session.post(is_vip_url, json=req_data)
dict_obj = response.json()
print(type(dict_obj))
print(dict_obj)

執行結果如下:

D:\SkyWorkSpace\WorkSpace\API_test\lm\ch_04\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/API_test/lm/ch_04/test_01/test_session.py

******** 第一次請求 *************
<class 'requests.models.Response'>
==========把返回是json格式的response 轉換成字典 =============
<class 'dict'>
{'status': 1, 'url': '/Main/index.html', 'token': 'MDAwMDAwMDAwMMurrpWavLehhs1-l7K5fZGEzYvdepuomcWmmqaMiHtnr5ylzYWosKKZq6HQxtOK0ZCme5p-haiZu2yrn4uNhJ3KedDYk7ivboS4jt2zuaOWhbeLln6gYW0', 'isenterprise': 0, 'uid': 'MDAwMDAwMDAwMLSsudyHqb9qhMtyoQ'}

******** 第二次請求 *************
<class 'dict'>
{'status': 1, 'isVip': 0, 'uid': 'MDAwMDAwMDAwMLSsudyHqb9qhMtyoQ', 'info': 'success'}

Process finished with exit code 0

 

用requests 發起 token 鑒權 的demo,test_token.py :

第二次請求時,須帶上 token 值

# -*- coding:utf-8 -*-
import requests

print('============ 第一次請求,登錄后可以得到token值 ==========')
# # 以下代碼都是關於 token 鑒權
# 第一次請求,登錄后可以得到token值
# 登錄,密碼自己注冊
login_url = 'https://openapiv5.ketangpai.com/UserApi/login'
req_data = {
    "email": "15361*****",
    "password": "nmb15*****",
    "remember": "0",
    "code": "",
    "mobile": "",
    "type": "login",
    "reqtimestamp": 1629990448376
}
# 注意 post 里面關鍵字參數是用data 還是 json ,需要找開發確認,或者抓包分析 content-type 的數據類型
# 這個請求的content-type 的數據類型是:application/json; charset=utf-8,所以用json關鍵字參數
resp = requests.post(login_url, json=req_data)
resp_dict = resp.json()     # 返回的response是json格式,所以用json()轉換成字典
print(type(resp_dict))
print(resp_dict)
token = resp_dict['data']['token']    # 返回token print(f"token值為:{token}")


# 第二次請求,須帶上token
print('\n============ 第二次請求 ==========')
url2 = 'https://openapiv5.ketangpai.com/UserApi/getUserBasinInfo'
req_header = {"token": token}
resp2 = requests.post(url2, headers=req_header)
print(resp2.json())

執行結果如下:

D:\SkyWorkSpace\WorkSpace\API_test\lm\ch_04\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/API_test/lm/ch_04/test_01/test_token.py
============ 第一次請求,登錄后可以得到token值 ==========
<class 'dict'>
{'status': 1, 'code': 10000, 'message': '訪問成功', 'data': {'url': '', 'token': 'ee32283b71dfd6e5995281754fe82544a095a95de865f17ee354e1491176af70', 'isenterprise': 0, 'uid': 'MDAwMDAwMDAwMLSsudyHqb9qhMtyoQ'}}
token值為:ee32283b71dfd6e5995281754fe82544a095a95de865f17ee354e1491176af70

============ 第二次請求 ==========
{'status': 1, 'code': 10000, 'message': '訪問成功', 'data': {'usertype': '0', 'username': 'Sky', 'account': 'ktp0217514196', 'avatar': 'http://assets.ketangpai.com//Public/Common/img/40/22.png', 'stno': '43108', 'school': '檸檬班', 'email': None, 'mobile': '15361886232', 'department': None, 'teachcourseid': None, 'isenterprise': '0', 'coid': None, 'token': 'ee32283b71dfd6e5995281754fe82544a095a95de865f17ee354e1491176af70', 'oldtoken': 'MDAwMDAwMDAwMMurrpWavLehhs1-l7K5fZGEzYvdepuomcWmmqaMiHtnr5ylzYWosKKZq6HQxtOK0ZCme5p-q6iZu2yrn4uNhJ3KedDYk7ivboS4jt2zuaOWhad73H6gYW0', 'uid': 'MDAwMDAwMDAwMLSsudyHqb9qhMtyoQ', 'isvip': 0, 'setting': '', 'mobile_url': 'https://w.ketangpai.com'}}

Process finished with exit code 0

 


免責聲明!

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



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