python接口自动化(二十)--token登录(详解)

简介: 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里,本质上是跟 cookie 是一样的,只是换个单词而已;另外一种是在 url 请求参数里,这种更直观。

简介


  

为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里,本质上是跟 cookie 是一样的,只是换个单词而已;另外一种是在 url 请求参数里,这种更直观。


登录返回token



1、如下图的这个登录接口,就是没有 cookies的登录接口。

1232840-20190422133002808-130457134.png


2、但是这个登录接口,登录成功后有返回token,如下图


1232840-20190422133242480-1026765827.png


请求头带token



1、登录成功后继续操作其它页面,发现post请求的请求头,都会带有token参数


1232840-20190422133616460-702736855.png

 

2、这种请求其实比cookie更简单,直接把登录后的token放到头部即可


token关联



1、用脚本实现登录,获取token参数,获取后传参到请求头就可以了

2、如果登录有验证码,前面的脚本登录步骤就省略了,自己手动登录后获取token


参考代码



 # coding:utf-8
  import requests
  header = {   # 登录抓包获取的头部
         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
         "Accept": "*/*",
          "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
          "Accept-Encoding": "gzip, deflate",
          "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
          "X-Requested-With": "XMLHttpRequest",
         "Content-Length": "423",
         "Connection": "keep-alive"
         }
 body = {"key1": "value1",
         "key2": "value2"}  # 这里账号密码就是抓包的数据
 s = requests.session()
 login_url = "http://xxx.login"   # 自己找带token网址
 login_ret = s.post(login_url, headers=header, data=body)
 # 这里token在返回的json里,可以直接提取
 token = login_ret.json()["token"]
 # 这是登录后发的一个post请求
 post_url = "http://xxx"
 # 添加token到请求头
 header["token"] = token
 # 如果这个post请求的头部其它参数变了,也可以直接更新
 header["Content-Length"]="9"
 body1 = {
          "key": "value"
          }
 post_ret = s.post(post_url, headers=header, data=body1)
 print post_ret.content

小结



Token的意义及用法


一.Token的来源:

   

当客户端多次向服务端请求数据时,服务端就需要多次从数据库中查询用户名和密码并进行对比,判断用户名和密码是否正确,并作出相应提示。但这样无疑会增加服务器端的运行压力,是否可以有一种方式只需要验证用户就是之前的用

户而不需要每次在客户端请求数据时都需要查询数据库判断用户名和密码是否正确。在这种请求下,引入了token来解决服务器端多次访问数据库问题。


1、什么是Token:

     

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


2、使用Token的目的:

T

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


二. Token的运用流程:


1、当用户首次登录成功之后, 服务器端就会生成一个 token 值,这个值,会在服务器保

存token值(保存在数据库中),再将这个token值返回给客户端;


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


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


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


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


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


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


8、Django Rest framework中JWT的使用稍有差异,这里不做详细说明。

相关文章
|
1天前
|
存储 安全 数据库
自动化密码填充:使用Python提高日常工作效率
自动化密码填充:使用Python提高日常工作效率
5 0
|
1天前
|
SQL 数据库 数据库管理
python自动生成SQL语句自动化
python自动生成SQL语句自动化
6 1
|
1天前
|
持续交付 Python
使用Python实现自动化Web内容巡检
使用Python实现自动化Web内容巡检
9 1
|
4天前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
11 4
|
7天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】自动化特征选择与优化的实践
【4月更文挑战第30天】特征选择在机器学习中至关重要,能降低模型复杂度,提高泛化能力和避免过拟合。本文介绍了自动化特征选择的三种方法:过滤法(如SelectKBest)、包装法(如RFE)和嵌入法(如随机森林)。通过结合这些方法,可实现特征优化,包括数据预处理、初步筛选、模型训练与评估、特征优化和结果验证。自动化特征选择能提升模型性能,适应不同数据集和任务需求,为机器学习项目提供坚实基础。
|
10天前
|
IDE 测试技术 持续交付
【专栏】Python自动化测试与单元测试框架:提升代码质量与效率
【4月更文挑战第27天】本文探讨了Python自动化测试与单元测试框架在提升代码质量与效率中的作用。Selenium、Appium用于Web和移动应用自动化测试,pytest提供强大、易扩展的测试支持。unittest是Python标准的单元测试框架,支持结构化测试用例和丰富的断言。实践中,应制定测试计划,编写高质量测试用例,实行持续集成与测试,并充分利用测试报告。这些工具和策略能有效保障代码质量和提升开发效率。
|
10天前
|
测试技术 API 持续交付
【专栏】Python自动化测试与单元测试框架
【4月更文挑战第27天】本文探讨了Python在自动化测试与单元测试中的应用,强调其简洁语法和丰富库的优势。文章分为三部分:首先,阐述自动化测试的重要性及Python的易学性、库支持、跨平台和社区支持;其次,介绍了Python的Unittest标准测试框架和Pytest第三方框架的特点与用法;最后,讨论了Web UI和API自动化测试实践,并提出持续集成、测试金字塔等最佳实践。Python为软件开发的测试环节提供了强大支持,帮助构建更稳定的系统。
|
11天前
|
JavaScript 前端开发 测试技术
MechanicalSoup,一个非常实用的 Python 自动化浏览器交互工具库!
MechanicalSoup,一个非常实用的 Python 自动化浏览器交互工具库!
27 9
|
11天前
|
Web App开发 人工智能 Java
Python Selenium实现自动化测试及Chrome驱动使用
Python Selenium实现自动化测试及Chrome驱动使用
11 2
|
13天前
|
测试技术 API 网络架构
Python的api自动化测试 编写测试用例
【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
16 2