一、使用 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