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抓取网页正文的源码
Jun 11 Python
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
python实现SMTP邮件发送功能
Jun 16 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
Python随机函数random()使用方法小结
Apr 29 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
六种酷炫Python运行进度条效果的实现代码
Jul 17 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
用python绘制樱花树
Oct 09 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 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中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
实例讲解php数据访问
2016/05/09 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
Python中文字符串截取问题
2015/06/15 Python
Python生成随机密码的方法
2017/06/16 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
Python 多维List创建的问题小结
2019/01/18 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
Django web框架使用url path name详解
2019/04/29 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
个人自我剖析材料
2014/02/07 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
小学课外活动总结
2014/07/09 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
如何使JavaScript休眠或等待
2021/04/27 Javascript
Go使用协程交替打印字符
2021/04/29 Golang