Python使用接口的cookie和token及session鉴权方式

        前言:今天咱们来学习下使用Python来做cookie和token及session鉴权方式,我们将通过几个简单的例子来快速学习上手Python使用接口的cookie和token及session鉴权方式_第1张图片

 

1、鉴权是什么?

       

        鉴权就是鉴定权限,最常见的就是鉴定该用户是否为登录状态。最开始做接口测试的时候,找了一个接口,把协议、ip、URL填好以后就以为万事大吉。一发起请求,查看响应就说登录信息错误。

        为什么呢?这就是因为没有鉴权,服务器根本就不认识你,所以就不理你,请求的数据就不会发送给你了。

2、http协议的工作原理


        答:说到这里,又不得不说一下http协议的工作原理。
简单来说,就是客户端(浏览器)发起请求,服务器端接收到请求,根据请求参数解析到对应的资源,再返回给客户端的过程。

Python使用接口的cookie和token及session鉴权方式_第2张图片

 

3、cookie鉴权是什么?

        

cookie是鉴权的方式之一,是客户端登录后,服务器端生成后发送给客户端的。cookie可以保存很多种数据,但是他只能保存字符串,且在安全性上有隐患。
在客户端发起请求后,服务器端生成一个cookie,并发送给客户端,保存在客户端本地,下次请求的时候带上cookie。

cookie鉴权:登陆接口的响应头当中,有set-cookie
           在登陆之后其它业务请求当中,请求头会带上登陆返回的cookie

Python使用接口的cookie和token及session鉴权方式_第3张图片

例子:

#####################例子:手动传参cookie

from jsonpath import jsonpath
import  requests

class KeTangPai_login:

    def __init__(self):
        self.url_ketang = "https://v4.ketangpai.com/UserApi/login"
        self.vip_url = "https://v4.ketangpai.com/VipApi/isVip"
        self.login_headers = {"content-type":"application/x-www-form-urlencoded; charset=UTF-8"}
        self.cookie = {}

    def login(self):
        data_login =     {
                "email":"xxxx",#换成你的账号
                "password":"xxxxx",#换成你的密码
                "remember": 0
            }
        res = requests.post(url =self.url_ketang,data= data_login,headers=self.login_headers)
        print(res.json())
        cookies = jsonpath(res.json(),"$..token")[0] #jsonpath取出cookie 是一个列表,需要通过索引取到具体值
        self.cookie["cookie"] =cookies

    def getUserVipSetting(self):
        self.login()
        vipSetting_res = requests.get(url=self.vip_url,headers = self.cookie)#headers = self.cookie的意思是 用返回的cookie作为头带到请求里面去
        print(vipSetting_res.json())

cl = KeTangPai_login()
cl.getUserVipSetting()

4、session鉴权是什么?

        session是一种会话,比如我发起请求到关闭浏览器这个过程就是一个会话。session是鉴权的方式之二,在客户端发起请求后,服务器生成一个对应的session,并保存在服务器中,再把session保存到cookie里面,通过cookie发送给客户端,客户端接收到cookie过后,下一次请求时就会把cookie带上,服务器收到请求中的session后就会把它与之前保存的session做对比,如果是一样的,那就说明是已经登录过的,如果不一样,那就需要重新登录

Python使用接口的cookie和token及session鉴权方式_第4张图片

例子:

例子2:session()自动传cookie鉴权

import requests
session = requests.session()
login_data = {"email": "xxxx",#换成你的账号
        "password": "XXXX",
        "remember": 0}
print("登陆之前的请求头:",session.headers)
response1 = session.post(url="https://v4.ketangpai.com/UserApi/login",data=login_data)
print(response1.json())
print("*"*30)
response2 = session.get(url="https://v4.ketangpai.com/VipApi/isVip")
print(response2.request.headers)
print(response2.json())

5、token鉴权是什么?

        tocken是一个令牌,是鉴权方式之三,他是由一部分固定的header、以及body组成的,在body中可以放userid+电话号码,等用户的非隐秘信息,然后再通过某种加密方式,把这两部分加密形成一个秘钥。
在客户端发起请求后,服务器会生成一个tocken,可以通过cookie也可以直接发送给客户端,客户端接收到tocken后,会把它保存在本地,在下一次请求时,会带上,服务器端收到二次请求以及带上的tocken后,会再根据用户的信息去加密一个tocken,再把两次tocken进行比对,如果是相同的,那就不用再登录了,如果不一样就需要再重新登录。

token鉴权:token值 一般都是放在登陆接口的响应数据当中,需要提取出来。
          在登陆之后其它业务请求当中,可能是在请求头当中带上token,也可能是在请求体当中带上token
          看接口的开发者如何定义

Python使用接口的cookie和token及session鉴权方式_第5张图片

 例子:



import requests
#登录令牌token
url = "https://openapiv5.ketangpai.com/UserApi/login"
req_data = {"email":"XXXX","password":"XXXX","remember":"0","code":"","mobile":"","type":"login"}
#这里用了Jason是因为新版课堂派的content-type是Jason格式
resp = requests.post(url,json=req_data)
print(resp.json())

#{'status': 1, 'code': 10000, 'message': '访问成功', 'data': {'url': '', 'token': '998478ac6fe7a50965aff12fc4f62b61f711829a14a335d74b68123b8c646f70', 'isenterprise': 0, 'uid': 'MDAwMDAwMDAwMLR2uZaGqatohLVyoQ'}}
#访问其他接口地址带上token
#通过字典取值到token
resp_dict = resp.json()
token = resp_dict["data"]["token"]
#下一个接口地址
url1 = "https://openapiv5.ketangpai.com/UserApi/getUserBasinInfo"
req_data2 = ""
#传入取值后的token
req_header = {"token": token}
resp2 = requests.post(url1,json=req_data2,headers=req_header)
print(resp2.json())
例子2:

class XinV5_KeTangPai_login:

    def __init__(self):
        self.url_ketang_login = "https://openapiv5.ketangpai.com//UserApi/login"
        self.login_headers = {"content-type":"application/json; charset=UTF-8"}
        self.rchiveSemesterList_ulr = "https://openapiv5.ketangpai.com//CourseApi/archiveSemesterList"
        self.token = {}
    def xin_login(self):
        login_data = {
            "email": "xxxx",#换成你的账号
            "password": "xxxx",
            # "remember": "0",
            # "code": "",
            # "mobile": "",
            # "type": "login",
            # "reqtimestamp": 1648376173056
        }
        response_login = requests.post(url=self.url_ketang_login,json=login_data,headers =self.login_headers)
        print(response_login.json())
        get_token = jsonpath(response_login.json(),"$..data")[0]["token"] #jsonpath提取token
        self.token["token"] = get_token

    def rchiveSemesterList(self):
        self.xin_login()
        data = {
        "isstudy": "0",
        "search": "",
        "reqtimestamp": 1648378296877
        }
        response_rchiveSemesterList = requests.post(url=self.rchiveSemesterList_ulr, json=data, headers=self.token)#headers=self.token把token带到请求头里面去鉴权
        print(response_rchiveSemesterList.json())




clll = XinV5_KeTangPai_login()
clll.rchiveSemesterList()

总结:

cookie、session、tocken的区别

1.生成的位置相同:cookie、session、tocken都是在服务器端生成;

2.保存的位置不同:cookie、tocken保存在客户端本地,session保存在服务器;

3.鉴权过程不同: cookie是将请求中携带的cookie与服务器记录的cookie做对比; session是将请求中携带的session与服务器存储的session做对比; tocken是将请求中携带的tocken与服务器通过请求中的信息(userid、签名)生成的tocken作对比。

你可能感兴趣的:(python,python)