Python requests模块session代码实例


Posted in Python onApril 14, 2020

http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制。requests也提供了相应的方法去操纵它们。

requests中的session对象能够让我们跨http请求保持某些参数,即让同一个session对象发送的请求头携带某个指定的参数。当然,最常见的应用是它可以让cookie保持在后续的一串请求中。

下面,通过官方文档中的示例来了解如何使用它。

import requests
s = requests.Session()
# 第一步:发送一个请求,用于设置请求中的cookies
# tips: http://httpbin.org能够用于测试http请求和响应
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 第二步:再发送一个请求,用于查看当前请求中的cookies
r = s.get("http://httpbin.org/cookies")
print(r.text)

运行结果

{
 "cookies": {
  "sessioncookie": "123456789"
 }
}

从结果中我们可以看出,第二次请求已经携带上了第一次请求所设置的cookie,即通过session达到了保持cookie的目的。示例中创建了一个requests.Session()对象,通过该对象来进行http请求操作,该操作基本类似于requests.request()

由于session让请求之间具有了连贯性,那么,就有了跨请求参数和非跨请求参数的区别。即有时我想让所有请求均带有某个参数,而有时我只是想让单独的一条请求带上临时的参数。通过下面的例子来了解如何使用。

import requests

s = requests.Session()
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
r1 = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r1.text)
# 'x-test' is sent
r2 = s.get('http://httpbin.org/headers')
print(r2.text)

运行结果

# r1.text
{
 "headers": {
  "Accept": "*/*", 
  "Accept-Encoding": "gzip, deflate", 
  "Host": "httpbin.org", 
  "User-Agent": "python-requests/2.22.0", 
  "X-Amzn-Trace-Id": "Root=1-5e91656f-b99f14a4d6f47f9e55a90bb4", 
  "X-Test": "true", 
  "X-Test2": "true"
 }
}
# r2.text
{
 "headers": {
  "Accept": "*/*", 
  "Accept-Encoding": "gzip, deflate", 
  "Host": "httpbin.org", 
  "User-Agent": "python-requests/2.22.0", 
  "X-Amzn-Trace-Id": "Root=1-5e91656f-e9741db4c2ca2fd6e0628396", 
  "X-Test": "true"
 }
}

从结果中我们可以得出两条结论:

session可以为请求方法提供缺省数据,比如第一次请求中的{'x-test': 'true'}就是缺省数据,此时的缺省数据就是跨请求参数。
方法级别的参数不会被跨请求保持,比如第二次请求时,没有携带headers={'x-test2': 'true'},返回的结果中也没有{'x-test2': 'true'},说明该参数没有在第一次请求后被保持住。

参考资料

https://github.com/psf/requests/blob/master/requests/sessions.py

https://requests.readthedocs.io/en/master/user/advanced/#session-objects

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python深入学习之对象的属性
Aug 31 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Python+pandas计算数据相关系数的实例
Jul 03 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
使用 Python 处理3万多条数据只要几秒钟
Jan 19 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
python数据分析之用sklearn预测糖尿病
Apr 22 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 #Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 #Python
Jupyter Notebook输出矢量图实例
Apr 14 #Python
pygame实现弹球游戏
Apr 14 #Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
Apr 13 #Python
Python request操作步骤及代码实例
Apr 13 #Python
jupyter notebook插入本地图片的实现
Apr 13 #Python
You might like
TMDPHP 模板引擎使用教程
2012/03/13 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
PHP中cookie知识点学习
2018/05/06 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
JS数组中对象去重操作示例
2019/06/04 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
Python中decorator使用实例
2015/04/14 Python
python中map、any、all函数用法分析
2015/04/21 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Numpy之文件存取的示例代码
2018/08/03 Python
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
美发活动策划书
2014/01/14 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
公司授权委托书范本
2014/09/18 职场文书
捐款感谢信
2015/01/20 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python