python中requests库session对象的妙用详解


Posted in Python onOctober 30, 2017

在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息。

妙用1

requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies。
举个栗子,跨请求保持cookies,在命令行上输入下面命令:

# 创建一个session对象 
s = requests.Session() 
# 用session对象发出get请求,设置cookies 
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') 
# 用session对象发出另外一个get请求,获取cookies 
r = s.get("http://httpbin.org/cookies") 
# 显示结果 
r.text 
 '{"cookies": {"sessioncookie": "123456789"}}'

妙用2

requests库的session对象还能为我们提供请求方法的缺省数据,通过设置session对象的属性来实现。

举个栗子,设置请求的auth和headers默认的缺省参数:

# 创建一个session对象 
s = requests.Session() 
# 设置session对象的auth属性,用来作为请求的默认参数 
s.auth = ('user', 'pass') 
# 设置session的headers属性,通过update方法,将其余请求方法中的headers属性合并起来作为最终的请求方法的headers 
s.headers.update({'x-test': 'true'}) 
# 发送请求,这里没有设置auth会默认使用session对象的auth属性,这里的headers属性会与session对象的headers属性合并 
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'}) 
# 查看发送请求的请求头 
r.request.headers

得到的请求头部是这样的:

{'Authorization': 'Basic dXNlcjpwYXNz', 'x-test': 'false'}

注意1:方法层的参数覆盖会话的参数,举个栗子:

将上面的请求中加上auth参数:

r = s.get('http://httpbin.org/headers', auth=('user','hah'), headers={'x-test2': 'true'})

获取该请求的请求头

{'Authorization': 'Basic dXNlcjpoYWg=', 'x-test': 'false'}

我们发现,请求方法中的Authorization变化了,也就是说方法层的参数覆盖了session的属性。

注意2:在request请求中,省略session对象中设置的属性,只需简单地在方法层参数中将那个键的值设置为 None ,那个键就会被自动省略掉。

再举个栗子:

TBD

总结

以上就是本文关于python中requests库session对象的妙用详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python面向对象编程基础解析(一)、13个最常用的Python深度学习库介绍等,有什么问题可以随时留言,小编会及时回复大家的。

Python 相关文章推荐
Python入门篇之条件、循环
Oct 17 Python
Python 中 Meta Classes详解
Feb 13 Python
Python中基础的socket编程实战攻略
Jun 01 Python
用pickle存储Python的原生对象方法
Apr 28 Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
深入理解Python 多线程
Jun 16 Python
python一些性能分析的技巧
Aug 30 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
用python 绘制茎叶图和复合饼图
Feb 26 Python
python源码剖析之PyObject详解
May 18 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 #Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 #Python
Python进程间通信之共享内存详解
Oct 30 #Python
import的本质解析
Oct 30 #Python
python中hashlib模块用法示例
Oct 30 #Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 #Python
Android分包MultiDex策略详解
Oct 30 #Python
You might like
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
python3将变量输入的简单实例
2020/08/19 Python
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
英国精品买手店:Browns Fashion
2016/09/29 全球购物
什么是类的返射机制
2016/02/06 面试题
Linux中如何用命令创建目录
2015/01/12 面试题
学生会主席事迹材料
2014/01/28 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
2014年工人工作总结
2014/11/25 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
初中信息技术教学计划
2015/01/22 职场文书
2015年中秋寄语
2015/07/31 职场文书