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 23 Python
Python中的zipfile模块使用详解
Jun 25 Python
Python导入oracle数据的方法
Jul 10 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
python ftplib模块使用代码实例
Dec 31 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 Python
vue学习笔记之动态组件和v-once指令简单示例
Feb 29 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
php自动适应范围的分页代码
2008/08/05 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
php实现图片压缩处理
2020/09/09 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
jQuery链使用指南
2015/01/20 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
Python之字典对象的几种创建方法
2020/09/30 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
小学生自我鉴定
2013/10/12 职场文书
拉丁舞学习者的自我评价
2013/10/27 职场文书
大四学年自我鉴定
2013/11/13 职场文书
给同学的道歉信
2014/01/16 职场文书
先进工作者申报材料
2014/12/23 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android