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