首页 > 编程语言 >Python接口自动化之Token详解及应用

Python接口自动化之Token详解及应用

时间:2023-09-15 09:45:23浏览次数:42  
标签:登录 Python res token 接口 Token 详解 requests

问题:在写接口自动化框架时,使用token鉴权后一直不生效,我是把"token:XX"放在请求头header里,调用接口时一直提示登录失效(鉴权失败),然后我就把token发到data中,还是不行,一直困扰着

一、Token基本概念及原理

1.Token作用

为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加

 

2.什么是Token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

3.Token运行原理

1.当用户首次登录成功之后, 服务器端就会生成一个 token 值,这个值会在服务器保存token值(保存在数据库中),再将这个token值返回给客户端;

2.客户端拿到 token 值之后,进行保存 (保存位置由服务器端设置);

3.以后客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器;

4.服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值进行比较;

5.如果两个 token 值相同, 说明用户登录成功过,当前用户处于登录状态;

6.如果没有这个 token 值, 没有登录成功;

7.如果 token 值不同,说明原来的登录信息已经失效,让用户重新登录;

4.Token认证优点

  • 无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.
  • 可重用性:在多个平台和域(domains)上运行,重复使用相同的令牌来验证用户,很容易构建与其他应用程序共享权限的应用程序。
  • 安全性:由于我们没有使用 Cookies,我们不必再防御网站的跨站点请求伪造(CSRF)攻击。

5.Token和 Cookie、Session 的选型

对于只需要登录用户并访问存储在站点数据库中的一些信息的中小型网站来说,Session Cookies 通常就能满足。如果有企业级站点,应用程序或附近的站点,并且需要处理大量的请求,尤其是第三方或很多第三方(包括位于不同域的API),则 token显然更适合。

 

二、Token实战

讲了那么多概念和原理,很多小伙伴可能不知道token长啥样,接下来以接口登录为例。

import requests
url = 'http://127.0.0.1:8000/user/login/'
payload = {
    "username":"vivi",
    "password":"123456"
}
res = requests.post(url,json=payload)
print(res.text)

响应结果如下:

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NDg5NzgsImVtYWlsIjoidml2aUBxcS5jb20ifQ.a2ExtNVjGrY8T1gefcJTnk4JUOx9NVtCk6lMK8o47co",
  "user_id": 1,
  "username": "vivi"
}

响应结果有返回token,但是token要怎么用呢,不急,我们一步步来。假设现在有个项目列表的接口,在不登录的前提下,不能访问。

import requests
url = 'http://127.0.0.1:8000/projects/'
pro_res = requests.get(url)
print(pro_res.json())

响应结果:提供认证信息

{'detail': '身份认证信息未提供。'}

项目列表接口需要携带token,服务器校验成功后,才能成功返回信息

重点来了,如何从登录接口获取token,项目列表接口又如何携带token?

访问登录接口,并获取token。

import requests
url = 'http://127.0.0.1:8000/user/login/'
payload = {
    "username":"vivi",
    "password":"123456"
}
login_res = requests.post(url,json=payload)
# 从响应结果中获取token值
token = login_res.json()["token"]
print("token:", token)

响应结果

token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NTEyMjksImVtYWlsIjoidml2aUBxcS5jb20ifQ.neqVM5MFGuFbKIUOCqW_qXBajhTTQMfmAs2PWTkEMes

项目列表接口又如何携带token呢,token直接加在请求头,这样就可以了么,当然不是,我们还需要在token前加上前缀,前缀由后端设置,见过最多的前缀是:Bearer,不清楚的参照接口文档。

项目列表携带token访问。

import requests
url = 'http://127.0.0.1:8000/projects/'
# 拼接最终的token,注意中间有个空格
token = "Bearer" + " " + token
headers={
    "authorization": token
}
pro_res = requests.get(url,headers=headers)
print(pro_res.json())

响应结果为:

{
    "count": 2,
    "results": [
        {
            "id": 1,
            "name": "自动化测试平台项目1",
            "tester": "vivi"
        },
        {
            "id": 2,
            "name": "自动化测试平台项目2",
            "tester": "coco"
        }
    ],
    "total_pages": 1,
    "current_page_num": 1
}

总结:本文主要介绍token基本概念、运行原理及在自动化中接口如何携带token进行访问。

标签:登录,Python,res,token,接口,Token,详解,requests
From: https://www.cnblogs.com/chennf/p/17704133.html

相关文章

  • python numpy 中的广播操作
    这辈子也学不会numpy。Python中的广播(broadcasting)是一种用于在不同形状的数组之间执行二进制操作的机制,使得它们的形状可以兼容,并且能够按照一定的规则进行元素级操作。这个机制允许你在不显式复制数据的情况下,对形状不同的数组进行操作,这可以节省内存和提高代码的效率。广播......
  • 基于Python+tkinter实现一个简易计算器桌面软件
    你是否想过自己能够开发一个桌面小工具?如果答案是“是”,那么你来对地方了!今天,我们要一起使用Python中的tkinter库,来创建一个简易的桌面计算器。1.为什么选择tkinter?tkinter是Python的标准GUI库。对于初学者来说,它非常友好,因为它提供了大量的预制部件,例如按钮、文本框等,这让开发......
  • gopup:Python公开数据仓库
    GoPUP支持Python3.7+,旨在使获取数据尽可能方便,主要用于学术研究目的。GoPUP项目所采集的数据皆来自公开的数据源,不涉及任何个人隐私数据和非公开数据。同时本项目提供的数据接口及相关数据仅用于学术研究,任何个人、机构及团体使用本项目的数据接口及相关数据请注意商业风险。......
  • python实现电影院座位预约
    功能需求用户进入电影院座位预约系统后,系统会给用户四个模块:预约座位,取消预约,查看预约情况,退出系统。功能分析1:定义一个主函数,用于用户进入预约系统后,供用户选择模块2:分别定义两个函数,座位预约函数和座位取消预约函数3:座位预约函数和取消预约函数需要通过用户输入的行数和列数费别......
  • 个人项目:Python实现简易论文查重
    这个作业属于哪个课程计科1/2班这个作业要求在哪里个人项目这个作业的目标按照规定流程完成个人项目,完整体验制作项目制作相关流程,制作简易论文查重系统GitHub作业链接:GitHub作业链接1.PSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)......
  • 【愚公系列】2023年09月 WPF控件专题 Expander控件详解
    (文章目录)前言WPF控件是WindowsPresentationFoundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见......
  • 【CVPR2022】Shunted Self-Attention via Multi-Scale Token Aggregation
    来自CVPR2022基于多尺度令牌聚合的分流自注意力论文地址:[2111.15193]ShuntedSelf-AttentionviaMulti-ScaleTokenAggregation(arxiv.org)项目地址:https://github.com/OliverRensu/Shunted-Transformer一、Introduction还是经典的ViT的历史遗留问题:ViT中的自注意力计算......
  • Python学习笔记-Python文件操作
    文件的编码简介计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?使用编码技术(密码本)将内容翻译成0和1存入。编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。计算机中有许多可用编码:UTF-8GBKBig5等不同的编码,将......
  • C++下标运算符详解
    C++规定,下标运算符[]必须以成员函数的形式进行重载。该重载函数在类中的声明格式如下:返回值类型&operator[](参数);const返回值类型&operator[](参数)const;使用第一种声明方式,[]不仅可以访问元素,还可以修改元素。使用第二种声明方式,[]只能访问而不能修改元素。在实......
  • python网络爬虫——爬取东方财富网股票数据并分析
     一、选题的背景:股票数据分析是一个非常重要的领域,它可以帮助投资者做出更明智的投资决策。选取这个选题的背景主要有以下几点:1.市场波动:股票市场不断波动,价格的涨跌对投资者来说是一个重要的影响因素。通过对股票数据进行分析,可以揭示市场的走势和各种趋势,帮助投资者更好地......