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