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使用saltstack生成服务器资产清单
Mar 01 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
用Python实现读写锁的示例代码
Nov 05 Python
python 提取key 为中文的json 串方法
Dec 31 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
python web框架 django wsgi原理解析
Aug 20 Python
python动态视频下载器的实现方法
Sep 16 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
django实现后台显示媒体文件
Apr 07 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 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
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Django ModelForm操作及验证方式
2020/03/30 Python
python定义类的简单用法
2020/07/24 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
《搭石》教学反思
2014/04/07 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
小学生春游活动方案
2014/08/20 职场文书
社区灵活就业证明
2014/11/03 职场文书
怎么写工作检讨书
2014/11/16 职场文书
消防宣传标语大全
2015/08/03 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang