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实现CET查分的方法
Mar 10 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
PyQt5每天必学之组合框
Apr 20 Python
Python格式化输出%s和%d
May 07 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
python实现n个数中选出m个数的方法
Nov 13 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 Python
PyTorch安装与基本使用详解
Aug 31 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 Echo字符串的连接格式
2016/03/07 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
php实现微信支付之现金红包
2018/05/30 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
Python通过命令开启http.server服务器的方法
2017/11/04 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Python模块WSGI使用详解
2018/02/02 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python实现年会抽奖程序
2019/01/22 Python
详解python中@的用法
2019/03/27 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
意大利网上药房:Farmacia 33
2020/01/27 全球购物
火锅店创业计划书范文
2014/02/02 职场文书
医学专业自荐信
2014/06/14 职场文书
代办社保委托书范文
2014/10/06 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
python tkinter实现定时关机
2021/04/21 Python
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js