首页 > 编程语言 >python__requests模块的session对象

python__requests模块的session对象

时间:2023-10-28 19:14:21浏览次数:44  
标签:__ get python resp 接口 session requests

*****************************************************************************************************************************************************************************************************************

面试时,面试官问我:自动化中,只需要登录一次,就可以跑其他的自动化用例。这个用什么方法。

目前公司项目自动化中实现方式:调登录接口并传入登录用户名和加密的密码来获取响应数据中的token值。后续的自动化用例再去调接口的话,就只需要在请求头中把获取到的token值携带上,就可以调接口成功;

但貌似这种方式并不是面试官想得到的答案。于是上网查资料,发现requests库中的 session对象,是此题的答案。于是本次学习和记录一下 requests中的session对象。

**************************************************************************************************************************************************************************************************************************************************

1、先看一个别人写的博客(博客地址:https://www.jianshu.com/p/adc2f76530d1)

requests

使用上其实很简单,可以直接通过 request.get() 的方式去操作。但如果对需要处理的对象发送请求比较频繁,或者需要登录。使用requests.session() 来操作其实更方便高效。

下面进行抓包测试。
*客户端ip 192.168.224.1
*服务端ip 192.168.224.133
192.168.224.133:30000 为测试环境搭建tornado服务,照着tornado官网的例子写的。

客户端代码如下

import requests

def use_each():
    # 两次调用get请求
    resp = requests.get(url='http://192.168.224.133:30000/test')
    print(resp.json())
    resp = requests.get(url='http://192.168.224.133:30000/test')
    print(resp.json())

if '__main__' == __name__:
    use_each()

可以看到两次get请求,抓包结果分别建立了两次TCP握手,两次挥手。客户端每次挥手势必都会等待2MSL后才彻底断开连接。

重新调整代码为session方式

import requests

def use_session():
    _session = requests.session()
    resp = _session.get(url='http://192.168.224.133:30000/test')
    print(resp.json())
    resp = _session.get(url='http://192.168.224.133:30000/test')
    print(resp.json())

if '__main__' == __name__:
    use_session()

两次get请求只建立了一个tcp通信信道,对同一个后端服务进行请求上明显效率更高。

查看源码可以看到requests会尝试去获取了一个poolmanager。

持有当前连接对象后再通过socket发送数据。

 2、session对象学习

2.1、从上述的博客中,大概看到两个重点信息:(1)通过创建的session对象来调接口进行请求,相对是在客户端和终端建立一个通道,后续的各请求都是走此通道(而像目前公司自动化项目的实现方式,相当的于每次调接口,都建立一次连接),session的这种方式能够提高执行的效率、减少了连接的资源。(2)requests会尝试去获取了一个poolmanager

 

2.2、那通过登录接口返回的token值,来调其他的接口这种方式,和 session对象调接口的方式有什么不同呢?

 

2.3、 另外,如果登录接口中,用户名的密码是加密的,那需要先将密码加密,再使用session 对象来调登录接口

 

2.4、sesion 方式调用接口时,需要根据不同接口的请求头参数不同,来传递不同的请求头参数

 

2.5、实际操作。。。。。。。。。。。。。。。。。。。。。。

 

标签:__,get,python,resp,接口,session,requests
From: https://www.cnblogs.com/ccnn9/p/17794466.html

相关文章

  • 易语言抖音视频提取工具,点赞,收藏,评论源码
    下面是界面: 下面是程序集代码:.版本2.支持库ietb.支持库spec.支持库iext.程序集窗口程序集_启动窗口.程序集变量页面,谷歌页面.程序集变量ccookiesA,文本型,,"0".子程序_按钮1_被单击.局部变量是否成功,逻辑型.局部变量谷歌浏览器路径,文本型.局......
  • Cannot connect to the Docker
    执行docker基础命令失败!CannotconnecttotheDockerdaemonatunix:///var/run/docker.sock.Isthedockerdaemonrunning?原因:docker服务没有启动。解决方法:执行systemctlstartdocker即可。......
  • 学习笔记7
    并发编程线程原理:一个操作系统(OS)包含许多并发进程。在进程模型中,进程是独立的执行单元。线程是某进程同一地址空间上的独立执行单元。创建某个进程就是在一个唯一地址空间创建一个主线程。当某进程开始时,就会执行该进程的主线程。如果只有一个主线程,那么进程和线程实际上并没......
  • 多平台cookie登录工具,提供源码和思路
    下面是界面: 下面是程序集代码:.版本2.支持库ietb.支持库spec.支持库iext.支持库eAPI.程序集窗口程序集_启动窗口.程序集变量页面,谷歌页面.程序集变量ccookiesA,文本型,,"0".子程序_按钮1_被单击.局部变量是否成功,逻辑型.局部变量谷歌浏览器路径......
  • minio简介
     一、简介 MinIO是一个基于ApacheLicensev2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。官网:https://www......
  • 2023-2024-1 20231329《计算机程序与设计》第五周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05这个作业的目标计算机科学概论第6章并完成云班课测试《C语言程序设计》第4章并完成云班课测试......
  • [ Redis 2 ] 持久化
    Redis_2持久化1.Redis.conf详解redis.conf从上向下详解1.1单位配置1redis对单位的大小写是不敏感的,单位可以是gb,GB,Gb等等。2可以包含其他配置文件的配置1.2网络配置绑定的ip和端口号bind127.0.0.1protected-modeyes#保护模式port63791.3通用配置Gener......
  • PDMS & AM 侧边栏菜单 C# WPF技术
    项目的完整下载地址https://files.cnblogs.com/files/NanShengBlogs/AMCSTest.zip?t=1698491030&download=true先看效果 下面先看实现的几个函数1#创建wpf的用户控件,无选项的参考此链接修改csproject文件类库项目添加wpf方法写入下列代码<UserControlx:Class="AMCSTe......
  • JavaFrame
    1.课程回顾在本人大三时修了JavaWeb编程和Java框架编程,这两门的课程结构大致是这样:JavaWeb:Java框架:Web开发基础Maven工具Servlet基础Spring框架ServletAPI核心接口SpringMVC会话跟踪数据持久化技术数据访问与JavaBeanBootstrap,Javascript,Iframe,Ajax......
  • 什么是serialVersionUID,为什么我应该使用它?
    内容来自DOChttps://q.houxu6.top/?s=什么是serialVersionUID,为什么我应该使用它?Eclipse在缺少serialVersionUID时会发出警告。可序列化的类Foo没有声明一个类型为long的静态最终serialVersionUID字段。serialVersionUID是什么,为什么它很重要?请举一个缺少seri......