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中wx将图标显示在右下角的脚本代码
Mar 08 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
详解Django中的form库的使用
Jul 18 Python
基于ID3决策树算法的实现(Python版)
May 31 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
Python如何调用外部系统命令
Aug 07 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
django创建简单的页面响应实例教程
Sep 06 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
浅谈django channels 路由误导
May 28 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
php全角字符转换为半角函数
2014/02/07 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
Python绘制股票移动均线的实例
2019/08/24 Python
python批量处理文件或文件夹
2020/07/28 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
Linux机考试题
2015/07/17 面试题
委托书范文
2014/04/02 职场文书
行政管理专业求职信
2014/07/06 职场文书
奶茶店创业计划书
2014/08/14 职场文书
五四青年节的活动方案
2014/08/20 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
廉政承诺书
2015/01/19 职场文书
停电调休通知
2015/04/16 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
军事理论课感想
2015/08/11 职场文书
Django操作cookie的实现
2021/05/26 Python
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
详解Python为什么不用设计模式
2021/06/24 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL