接口自动化中cookies的处理技术

news2025/6/16 8:11:36

一,理论知识

为什么有cookie和session?

因为http协议是一种无状态的协议,即每次服务端接受到客户端的请求时都时一个全新的请求,服务器并不知道客户端的请求记录,session和cookie主要目的就是弥补http的无状态特性

cookie

cookie是服务器发送到用户浏览器并保存到用户本地的一小块数据,会在浏览器再下次向同一服务器再发起请求时被携带并发送到服务器上。通常用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。

原理:
Cookie技术会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。

② 客户端再向服务器端发送请求的时候,客户端会在请求报文中加入Cookie值后发送出去。服务器端会检查客户端发送的请求中有没有Cookie值,然后对比服务器上的记录,最后确定是哪一个客户端,之前的信息状态是什么

session

session 是一种在服务端记录用户信息的技术,在http无状态协议下,服务端记录用户状态时用于标识具体用户的机制,是在服务端保存的用来追踪用户状态的数据结构(键值对),可以保存在文件,数据库或者集群中

Session是存放在服务器端、用来存放用户数据的(类似于HashTable结构)。

当浏览器第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。

当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable,以此来达到共享数据的目的。

cookie和session的区别

1,存储位置不同,cookie是将用户数据通过加密的方式存储在客户端(大多数在浏览器),session存储在服务器(用于控制客户端和服务端的连接)

2,存储容量不同,cookie只能发ASCII码,通过编码的方式获取Unicode字符,或者二进制数据,不能存复杂数据,session能存任何类型的数据。

3,安全性,隐私策略不同,cookie放在客户端,可以进行cookie欺骗,session放在服务端,比较安全

4,有效期不同,cookie实际上可以设置属性,达到长期有效(记住历史登录),(expires/Max-Age 字段为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和session一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。)

session依赖于JSESSIONID的cookie,JSESSIONID过期时间默认为-1,即关闭窗口就失效,可以设置时间,但是超时时间太长,容易造成内存溢出,

5,对服务器的压力不同,cookie保存在本地,不存在服务器压力,session保存在服务端,每个用户都会产生一个session,当访问增多,会比较占用服务器的性能,如果主要考虑减轻服务器性能压力,应使用cookie。

python接口自动化中对cookie和session的处理方式

在python中,有专门的一个类来处理cookie和session,即Session类。类似于jmeter的cookie管理器。

import requests  # 导入request

s = requests.Session()  # 实例化一个request.Session类的对象

print("登陆之前的cookies:",s.cookies)  # 与登录之后的cookie对比,一开始为空,后面登录后,就获取到了cookie

 

login_url = "https://www.ketangpai.com/UserApi/login"

login_datas = {"email":"198658759##",

             "password":"sdk93#####",

             "remember":0}

 

resp = s.post(login_url, data=login_datas)  # 发送post请求,登录,获取cookie,会自动添加到s对象中,后续接口请求要用到cookie,直接使用即可

print("登陆之后的cookies:",s.cookies) # 主动会将响应的set-cookies添加到s对象当中。

print(resp.json())

 

userinfo_url = "https://www.ketangpai.com/UserApi/getUserInfo"  # 发送请求,获取用户信息,验证是否自动带上了cookie

resp1 = s.get(userinfo_url)

print(resp1.json())

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

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

Redis代码实践总结

一、背景: redis从安装到实践,做一些具体的记录。 1.1 Redis和 RedisStack和Redis Enterprise redis简介 Redis 是一种开源(BSD 许可)内存中数据结构存储,用作数据库、缓存、消息代理和流引擎。 Redis 提供数据结构…

2023/9/20 -- C++/QT

时钟: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QDateTime> #include <QLabel> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespac…

WebGL层次模型——多节点模型

目录 多节点模型 MultiJointModel中的层次结构 控制各部件旋转角度的变量 示例程序——共用顶点数据&#xff0c;通过模型矩阵缩放实现&#xff08;MultiJointModel.js&#xff09; MultiJointModel.js&#xff08;按键响应部分&#xff09; MultiJointModel.js&#x…

CentOS 7.5 centos failed to load selinux policy 错误解决方法

这是个 selinux 使能导致的&#xff0c; 关闭即可 在进入到内核选中界面&#xff0c;选中要启动的内核&#xff0c; 按键盘 e 就会进入启动参数界面 进入启动参数界面如图&#xff0c;按上下键找到 UTF8 UTF8如图&#xff0c; 添加 selinux0 添加完成如图&#xff0c; 按 ctr…

编译工具:CMake(八) | cmake 常用指令

编译工具&#xff1a;CMake&#xff08;八&#xff09; | cmake 常用指令 基本指令 基本指令 ADD_DEFINITIONS向 C/C编译器添加-D 定义&#xff0c;比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC)&#xff0c;参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #end…

OpenCV实现“蓝线挑战“特效

原理 算法原理可以分为三个流程&#xff1a; 1、将视频&#xff08;图像&#xff09;从&#xff08;顶->底&#xff09;或&#xff08;左->右&#xff09;逐行&#xff08;列&#xff09;扫描图像。 2、将扫描完成的行&#xff08;列&#xff09;像素重新生成定格图像…

【JAVA-Day31】深入解析冒泡、选择和插入排序在数组排序中的应用

深入解析冒泡、选择和插入排序在数组排序中的应用 深入解析冒泡、选择和插入排序在数组排序中的应用摘要引言冒泡排序&#xff1a;基本原理和应用场景冒泡排序算法的工作原理什么情况下选择冒泡排序冒泡排序的时间复杂度和空间复杂度 选择排序&#xff1a;精确排序策略和最佳实…

chroma 向量库使用;查询、更新与插入

参考: https://docs.trychroma.com/usage-guide https://blog.csdn.net/weixin_46515328/article/details/131855650 chroma 支持保存文档、向量&#xff0c;和向量的ids值 ##安装 pip install chromadb1、使用 import chromadb##这句可以数据库默认时刻保存&#xff0c;启动…

岭回归与LASSO回归:解析两大经典线性回归方法

文章目录 &#x1f34b;引言&#x1f34b;岭回归&#xff08;Ridge Regression&#xff09;&#x1f34b;实战---岭回归&#x1f34b;LASSO回归&#xff08;LASSO Regression&#xff09;&#x1f34b;实战---LASSO回归&#x1f34b;岭回归和LASSO哪个更容易是直线&#x1f34b…

Cannot read properties of null bug解决方法

项目场景&#xff1a; vue3element plusts。 问题描述 本地运行没有任何错误&#xff0c;在生产环境中&#xff0c;当点击按钮&#xff0c;展示el-dialog时第一次正常&#xff0c;关闭时报错 原因分析&#xff1a; 定位到el-dialog组件&#xff0c;最初认为是dialog中table依…

IMAGEBIND: One Embedding Space To Bind Them All论文笔记

论文https://arxiv.org/pdf/2305.05665.pdf代码https://github.com/facebookresearch/ImageBind 1. Motivation 像CLIP这一类的方法只能实现Text-Image这两个模态的 Embedding 对齐&#xff0c;本文提出的ImageBind能够实现六个模态&#xff08;images, text, audio, depth, t…

进阶指针(一)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 进阶指针&#xff08;一&#xff09; 0.回顾初阶指针1.字符指针1.1 相关面试题 2.数组指针3.指针数组3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用 4.数组传参和指针传参4.…

linux下解决tomcat错误问题

错误一&#xff1a; Linux下Tomcat启动报错&#xff1a;Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 原因&#xff1a;可能是Linux环境变了&#xff0c;需要在catalina.sh文件里指定JDK路径 解决方式&#xff1a; 在/bin/catalina.sh配置文件中加…

基于springboot+vue的爱心助农网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Linux离线安装telnet

TELNET rmp地址 链接: https://pan.baidu.com/s/1Yl3zt1p3zjp2fYTwByf7dQ?pwdgdcg 提取码: gdcg 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 命令 rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm rpm -ivh telnet-…

autoware.ai docker安装

1.进行docker安装 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88sudo add-apt-reposi…

Unity实战(11):项目非启动状态下使用代码批量替换材质

目录 前言 配置环境 一、场景准备 二、代码演示 三、效果呈现 四、关于Resources.Load()的说明 前言 本文内容为unity在编辑状态&#xff08;非启动状态&#xff09;下使用代码批量替换材质&#xff0c;该方法也适用于其他在编辑状态下对物体的操作需求。 配置环境 win1…

Mysql003:用户管理

前言&#xff1a;本章节讲解的是mysql中的用户管理&#xff0c;包括&#xff08;管理数据用户&#xff09;、&#xff08;控制数据库的访问权限&#xff09;。 目录 1. 查询用户 2. 创建用户 3. 修改用户密码 4. 删除用户 5. 权限控制 1. 查询用户 在mysql数据库中&#xff0…

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间?

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间&#xff1f; 1、在手机上找到「设置」并点击打开&#xff1b; 2、在设置内找到「健康使用手机」并点击进入&#xff1b; 3、开启健康使用手机后&#xff0c;选择孩子使用&#xff1b; 4、在健康使用手机内&#xff0c…

已解决 Java Error: Exception in thread ‘main‘ java.lang.ClassNotFoundException

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…