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 时间操作例子和时间格式化参数小结
Apr 24 Python
深入了解Python数据类型之列表
Jun 24 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
浅析python的Lambda表达式
Feb 27 Python
在Django中实现添加user到group并查看
Nov 18 Python
python、Matlab求定积分的实现
Nov 20 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
Python如何在windows环境安装pip及rarfile
Jun 15 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 COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
python实现图像外边界跟踪操作
2020/07/13 Python
大学应届生求职简历的自我评价
2013/10/08 职场文书
平民服装店创业计划书
2014/01/17 职场文书
博士生求职信
2014/07/06 职场文书
生物工程专业求职信
2014/09/03 职场文书
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python