——————·今天距2021年258天·——————

这是ITester软件测试小栈第113次推文

在上一篇Python接口自动化测试系列文章:Python接口自动化之cookie、session应用,介绍了cookie、session原理及在自动化过程中如何利用cookie、session保持会话状态。

以下介绍Token原理及在自动化中的应用。

Token基本概念及原理

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

2什么是Token

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

3Token运行原理

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

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

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

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

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

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

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

4Token认证优点

  • 无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.

  • 可重用性:在多个平台和域(domains)上运行,重复使用相同的令牌来验证用户,很容易构建与其他应用程序共享权限的应用程序。

  • 安全性:由于我们没有使用 Cookies,我们不必再防御网站的跨站点请求伪造(CSRF)攻击。

5Token和 Cookie、Session 的选型

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

Token实战

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

import requestsurl = '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 requestsurl = 'http://127.0.0.1:8000/projects/'pro_res = requests.get(url)print(pro_res.json())

响应结果:提供认证信息

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

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

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

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

import requestsurl = '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 requestsurl = 'http://127.0.0.1:8000/projects/'# 拼接最终的token,注意中间有个空格token = "Bearer" + " " + tokenheaders={    "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进行访问。

下一篇:requests封装,比较重要,离最终的框架又进了一步。

以上That‘s all更多系列文章敬请期待ITester软件测试小栈往期内容宠幸1.Fiddler基本使用


2.Fiddler抓包介绍


3.Fiddler请求过滤


4.Fiddler设置断点(一)


5.Fiddler跨域调试及Django跨域处理


6.Python接口自动化-接口基础(一)


7.Python接口自动化-接口基础(二)


8.Python接口自动化-requests模块之get请求


9.Python接口自动化-requests模块之post请求


10.Python接口自动化之cookie、session应用

快来星标 置顶 关注我

后台 回复资源取干货回复2020与我共同成长

想要获取相关资料和软件 ?

测试交流Q群:727998947

delphi接口带上请求头是什么意思_Python接口自动化之Token详解及应用相关推荐

  1. delphi接口带上请求头是什么意思_python接口自动化(二十)--token登录(详解)...

    简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮.有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录.token 传参有两种一种是放在请 ...

  2. delphi接口带上请求头是什么意思_Gin框架中使用JWT进行接口验证

    背景: 在如今前后端分离开发的大环境中,我们需要解决一些登陆,后期身份认证以及鉴权相关的事情,通常的方案就是采用请求头携带token的方式进行实现.本篇文章主要分享下在Golang语言下使用jwt-g ...

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

    ------·今天距2021年258天·------ 这是ITester软件测试小栈第113次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之cookie.session应用 ...

  4. delphi 使用cef3谷歌浏览器内核加载带header请求头的网页

    上一篇博文介绍到用IE加载带Header请求头的网页,本篇介绍使用cef3实现同样的功能. 我使用的谷歌浏览器内核是49版,支持XP系统的最新版,所以,版本有够低的了. procedure TForm ...

  5. STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解

    STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解 上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法 上一篇地址https ...

  6. 史上最易懂——ReactNative分组列表SectionList使用详情及示例详解

    React Native系列 <逻辑性最强的React Native环境搭建与调试> <ReactNative开发工具有这一篇足矣> <解决React Native un ...

  7. vue怎么让接口带上cookie_在Vue中怎么使用cookie 之 vue-cookies

    cookie 在工作中比较常用, 可以自行封装一些 添加/删除/获取cookie的方法, 可参考这个 在Vue中有个很好用的插件 vue-cookies github地址:https://github ...

  8. Spring如何实现统一的基于请求头header或url的接口版本控制

    1.基于请求头方式的版本控制 定义自己的 RequestCondition 来做请求头的匹配: public class APIVersionCondition implements RequestC ...

  9. python爬虫请求头是什么意思_python爬虫请求头的使用

    这篇文章我们来讲一下在网站建设中,python爬虫请求头的使用.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 爬虫请求头 网页获取: 通过urlopen来进行获取 requ ...

最新文章

  1. 【Plant Cell】突破!加入一种酵母,可显著提高水稻氮利用率及产量!
  2. 请求分页系统中页面分配策略与页面置换策略的关系
  3. C#从服务器下载文件到客户端源码
  4. LINQ TO SQL中还是用传统的连接串方式建立DbContext更好些
  5. 西南交大计算机组成原理考试大纲,西南交大计算机组成原理实验二七段LED数码管显示译码器的设计.docx...
  6. QT 显示中文、解决发布乱码、获得系统特定目录、获取文件属性、列表控件、屏幕截图显示保存(定时器)、视频直播、右键菜单
  7. 元宇宙是个啥?送4本科普好书
  8. image1载入大图片时如果stretch=true,image1会显示出大图片的缩图,那么如何将这个缩图镜像复制一份赋值给另一个image2的picture呢?...
  9. attachEvent和addEventListener详解
  10. 故障处理,no space left on device!几种可能性?
  11. 【转载】红外遥控HS0038B接法
  12. 如何判断万能打印机的好坏呢?
  13. vs报错:8007000E 内存资源不足,无法完成此操作
  14. 已知T(n)=2T(n/2)+n,求O(n)?
  15. 云免流usb共享电脑_云免流usb共享电脑
  16. 西南交通大学暑期夏令营面试
  17. 《实用C++》第8课:赋值运算符和赋值表达式
  18. 重磅!谷歌发布《深度学习调优手册》!Hinton转发点赞!
  19. python开发bi报表_bi报表
  20. keystore生成证书实例

热门文章

  1. python如何限制字符串长度_Python uuid4,如何限制唯一字符的长度 - python
  2. 计算机一级windows系统操作知识点,计算机一级考试:高分必看知识点之windows操作...
  3. 华为p4支持鸿蒙功能吗_什么样的手机可以刷鸿蒙系统?看看你的手机支持吗?...
  4. Python中为啥 ‘abcd‘<‘ad‘ 答案他来啦
  5. 学习计划(11.5)
  6. 基于SU的快速傅里叶变换(FFT)
  7. Linux网络:内核中的网络参数(net.xxx.xxx)
  8. cpuset(7) — Linux manual page
  9. Linux内核 eBPF基础:kprobe原理源码分析:源码分析
  10. ATK插件化开发:AtkPlug,AtkSocket