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基于queue和threading实现多线程下载实例
Oct 08 Python
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
深入理解Python装饰器
Jul 27 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
Python调用shell命令常用方法(4种)
May 11 Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 Python
python实现代码审查自动回复消息
Feb 01 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
js活用事件触发对象动作
2008/08/10 Javascript
javascript StringBuilder类实现
2008/12/22 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
详解jQuery中的事件
2016/12/14 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
分析在Python中何种情况下需要使用断言
2015/04/01 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python3实现简单飞机大战
2020/11/29 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
你们项目是如何进行变更控制的
2015/08/26 面试题
恶搞卫生巾广告词
2014/03/18 职场文书
书香家庭事迹材料
2014/05/09 职场文书
详解python的内存分配机制
2021/05/10 Python
浅谈Python中的正则表达式
2021/06/28 Python