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常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Python 中Pickle库的使用详解
Feb 24 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
python取余运算符知识点详解
Jun 27 Python
Python docutils文档编译过程方法解析
Jun 23 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
python调用私有属性的方法总结
Jul 24 Python
MoviePy常用剪辑类及Python视频剪辑自动化
Dec 18 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 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 获取mysql数据库信息代码
2009/03/12 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
python协程之动态添加任务的方法
2019/02/19 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
医学生求职自荐信
2013/10/25 职场文书
医学专业毕业生推荐信
2013/11/14 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
爱心捐款感谢信
2015/01/20 职场文书
民主生活会意见
2015/06/05 职场文书
小学总务工作总结
2015/08/13 职场文书
诚信教育主题班会
2015/08/13 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers