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 相关文章推荐
Python3.2中的字符串函数学习总结
Apr 23 Python
Python守护线程用法实例
Jun 23 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
Python中的取模运算方法
Nov 10 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python小白学习包管理器pip安装
Jun 09 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP动态变静态原理
2006/11/25 PHP
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
php短信接口代码
2016/05/13 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
JS开发自己的类库实例分析
2019/08/28 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
python绘制简单折线图代码示例
2017/12/19 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
怎么样写好简历中的自我评价
2013/10/25 职场文书
二年级数学教学反思
2014/01/21 职场文书
网络教育自我鉴定
2014/02/04 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
化工专业求职信
2014/07/01 职场文书
余世维讲座观后感
2015/06/11 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript