Python自动化测试之cookie绕过登录(保持登录状态)

news2024/12/29 9:25:25

前言

在编写接口自动化测试用例或其他脚本的过程中,经常会遇到需要绕过用户名/密码或验证码登录,去请求接口的情况,一是因为有时验证码会比较复杂,比如有些图形验证码,难以通过接口的方式去处理;再者,每次请求接口前如果都需要先去登录一次,这样不仅效率低,还耗费资源。

有些网站是使用cookie辨别用户身份的,此时我们便可以先登录一次,拿到登录成功后的cookie,后续请求时在请求头中加入该cookie,便可保持登录状态直接请求。

cookie绕过登录其实是登录状态保持,而不是真的不需要登录。

并非所有的网站都是使用cookie机制,除了cookie机制外,还有session、token等方式进行会话保持,这我也会在后续的文章中会给大家进行说明。

cookie工作原理

HTTP协议1.0版本是无状态的,对于事务处理没有记忆能力,比如用户登录了某个网站后,再次刷新这个页面去请求服务器,如果没有相关机制的话,服务器是不知道这个请求是否还是刷新之前登录的用户发出来的。此时,为了维持用户的登录状态,即为了使服务器能够识别页面刷新之后的请求,就可以使用cookie机制。

cookie原理简单概括如下:

  1. 用户在客户端 (一般为浏览器) 中访问某个页面 ,也就是向服务器发送请求。
  2. 服务器收到请求后,会在响应头中设置Set-Cookie字段值,该字段存储相关信息和状态。
  3. 客户端解析服务器HTTP响应头中的Set-Cookie字段,并以key=value的形式保存在本地,之后客户端每次发送HTTP请求时,都会在请求头中增加Cookie字段。
  4. 服务器接收到客户端的HTTP请求之后,会从请求头中取出Cookie数据,来校验客户端状态或身份信息。

以登录某网站为例,点击登录时请求sign_in接口,请求成功后 (即登录成功后) 在响应头中会返回set-cookie字段,如下:

浏览器会保存上图中set-cookie字段的值,后续发送请求 (即登录后进行页面操作) 时,请求头中都会携带包含刚刚保存的set-cookie值的cookie,如下所示:

 

服务器接收到这个cookie后,便会用它去查找内存中的记录,有则校验成功。

由此可知,如果需要绕过用户名密码、验证码等进行模拟登录,然后再去请求其他接口,那么我们可以先拿到登录成功后的cookie,将cookie放在请求头中,再去调用需要登录才能请求的接口,便能调用成功。

cookie绕过登录

1,哪些场景需要使用cookie绕过登录?

  • 网络爬虫,代码去爬取某个网站时需要验证码登录,而这时代码获取验证码登录有一定难度,就可以先抓取到登录后的cookie用于后续的接口请求。
  • 接口自动化测试,对某个需要登录的项目进行接口测试,每次请求时都先请求登录接口进行登录会影响效率而且极其不方便,这时就可以抓取到第一次登录后的cookie,后续每次接口请求都带上该cookie,服务器就会认为是登录状态。
  • 其他需要绕过登录的场景。
     

 

2,接下来举例说明怎样编写python脚本,利用cookie机制绕过登录。

  • 需求:请求接口获取博客园网自己账号的个人信息。
  • 需求分析:
  1. 需要先登录博客园,才能去请求获取个人信息接口拿到个人信息
  2. 该网站的登录方式有两种:用户名、密码登录,手机验证码登录
  3. 可尝试使用cookie绕过这两种登录方式。
     

3,思路:

  • 首先,先使用手机验证码登录网站,Fiddler进行抓包,获取登录后的cookie信息;

  • 然后,编写python代码,拿上一步中获取到的cookie信息去请求获取个人信息接口;

  • 最后,个人信息获取成功便说明绕过了登录。

 

4,实际操作流程如下:

  • 首先,登录网站,Fiddler抓包获取登录成功后的cookie。

  • 然后,cookie信息去请求获取个人信息接口。

    登录后同样可以抓取到获取个人信息接口的信息。

 个人信息接口请求方式为GET,请求URL如图所示,那么我们只需要这两点信息就足够了。接下使用上一步中拿到的cookie去请求这个接口。代码如下:

import requests
 
url = "https://account.cnblogs.com/user/userinfo"
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.30",
    "cookie": "登录成功后的cookie"
}
 
res = requests.get(url=url, headers=headers).text
print(res)
  • 运行代码,结果如下:

    可以看到,成功获取了个人信息。

运行后结果如下:

从上图可以看出来,不加登录成功后的cookie去请求接口,则会提示先登录或注册。

结语

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/776579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统学习Halcon视觉软件指南

要系统学习Halcon视觉软件,您可以按照以下步骤进行: 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 学习基本概念:了解Halcon的基本概念和术语,例如图像处理、特征提取、图像匹配等。可以查阅Halcon的官方…

Web开发的富文本编辑器CKEditor介绍,Django有库ckeditor_uploader对它进行支持,django-ckeditor安装方法及使用注意事项

当需要在网页应用程序中提供富文本编辑功能时,CKEditor是一个流行的选择。CKEditor是一个开源的JavaScript富文本编辑器,它提供了强大的功能和用户友好的界面,使用户可以轻松创建和编辑格式化的文本内容。 以下是CKEditor的一些主要特性&…

MySQL进阶:函数

​ 在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数。函数可以理解为别人封装好的模板代码。 一、聚合函数 ​ 在MySQL中,聚合函数主要由:count、sum、min、max、avg组成,这些函数前面已经提过&…

std::stox类型

std::stod 函数原型 double stod (const string& str, size_t* idx 0); double stod (const wstring& str, size_t* idx 0);函数功能 将std::string字符串转化为双精度类型 函数参数 str 待转换的字符串 idx 如果idx的指针不为空,则该函数会将idx的…

为什么计算ORB特征点的时候还要取圆形而不是方形像素区域呢?

ORB (Oriented FAST and Rotated BRIEF)是一种在计算机视觉中广泛应用的特征检测和描述符算法。它的设计目的是为了快速、有效地提取图像中的关键点和描述符。在ORB的过程中,确实会涉及到提取圆形区域的操作,这主要出于以下的原因: 旋转不变性…

C++ VS 链接第三方库

C VS 链接第三方库 include lib dll 需要把动态库考到可执行程序的目录之下

客户异常数据清洗详细教程——pandas

前言 在不同行业中,我们经常会遇到一个麻烦的问题:数据清洗。尤其是当我们需要处理客户编码异常数据时,这个问题变得尤为重要。想象一下,许多银行都是以客户为单位管理数据的,因此每个客户都有一个独特的编码。在处理…

浅谈医院综合电气管理与节能措施

摘要:随着我国经济建设的不断加快,我国能源消耗也越来越大,如何通过电气能源管理实现节能是各行各业都在研究的课题。医院作为我国重要的医疗服务机构,能源管理是医院管理中的重要组成部分。本文将针对医院电气能源管理与节能措施…

关于Qt For android第一次编译时出现的问题

搞了三四天,搞的快崩溃了,问题提示为 FAILURE: Build failed with an exception.* What went wrong: A problem occurred configuring root project android-build. > Could not resolve all artifacts for configuration :classpath.> Could not…

53从零开始学Java之Integer底层原理探究

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在之前的两篇文章中,壹哥给大家介绍了Java中的包装类及其特点、用法,但是这些…

正则表达式——Java

1、简介 正则表达式(Regular Expression)又称正规表示法、常规表示法,在代码中常简写为 regex、regexp 或 RE,它是计算机科学的一个概念。 String 类里也提供了如下几个特殊的方法。 boolean matches(String regex)&#xff1a…

小研究 - 面向 Java 的高对抗内存型 Webshell 检测技术(四)

由于 Web 应用程序的复杂性和重要性, 导致其成为网络攻击的主要目标之一。攻击者在入侵一个网站后, 通常会植入一个 Webshell, 来持久化控制网站。但随着攻防双方的博弈, 各种检测技术、终端安全产品被广泛应用, 使得传统的以文件形式驻留的 Webshell 越来越容易被检测到, 内存…

视频做成GIF动图怎么做?分享超简单的制作方法

将视频制作GIF动图的好处在于它可以将原本较长的视频压缩成一个简短、易于分享的图像文件。这使得它们非常适合用于社交媒体、博客、电子邮件等场景,可以当做表情包来使用,尤其是看到一段搞笑的视频,想要把它做成GIF动图该怎么做呢&#xff1…

【System Verilog and UVM基础入门17】Using get_next_item()

从小父亲就教育我,做一个对社会有用的人! 关于握手协议的文章,网上有很多很多,这篇文章是最原滋原味的介绍,希望可以帮助到有缘人! uvm_driver #(REQ,RSP) The base class for drivers that initiate req…

CS 144 Lab One -- 流重组器

CS 144 Lab One -- 流重组器 实验结构如何调试StreamReassembler 实现 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab 1 对应的PDF: Lab Checkpoint 1: stitching substrings into a byte stream 实验结构 这幅图完整的说明了CS144 这门实验的结构: 其中…

MySQL约束和数据类型

目录 约束条件 MySQL数据类型 1、数值类型 2、字符串类型 3、日期时间类型 源码等资料获取方法 约束条件 约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期。 常用约束条件如下: UNSIGNED :无符号,值…

【数据结构与算法】哈夫曼编码(最优二叉树)实现

哈夫曼编码 等长编码:占的位置一样 变长编码(不等长编码):经常使用的编码比较短,不常用的比较短 最优:总长度最短 最优的要求:占用空间尽可能短,不占用多余空间,且不…

【MySQL】DML数据操纵语言(非常适合MySQL初学者学习)

🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:重…

清华大学携手蚂蚁集团,攻坚可信AI、安全通用大模型等关键技术

2023年4月7日,清华大学与蚂蚁集团签署合作协议,双方将在“下一代互联网应用安全技术”方向展开合作,聚焦智能风控、反欺诈等核心安全场景,携手攻坚可信AI、安全大模型等关键技术,并加速技术落地应用,以解决…

NodeJS内置模块 npm包管理工具 nvm版本管理工具 nrm镜像管理工具

Nodejs 下载 下载地址 node 是什么 node.js 是一个开源的,跨平台的 JavaScript 运行环境 运行 js 文件 node 文件.jsnodemon 监听文件变化 npm i nodemon -gnodemon 文件名全局变量 global globalThis node 中顶级对象为 global ,也可以使用 glo…