Python requests模块cookie实例解析


Posted in Python onApril 14, 2020

cookie并不陌生,与session一样,能够让http请求前后保持状态。与session不同之处,在于cookie数据仅保存于客户端。requests也提供了相应到方法去处理cookie。

在python requests模块-session中,我们知道了requests中的session对象能够在请求之间保持cookie,它极大地方便了我们去使用cookie。当我们想设置方法级别中的请求时,可以如下面示例一样操作。

import requests
s = requests.session()
# 第一步:发送一个请求,用于设置请求中的cookies
cookies = dict(cookies_are='cookie1')
# tips: http://httpbin.org能够用于测试http请求和响应
r1 = s.get(url='http://httpbin.org/cookies', cookies=cookies)
print(r1.text)
# 第二步:发送一个请求,用于再次设置请求中的cookies
cookies = dict(cookies_are='cookie2')
r2 = s.get(url='http://httpbin.org/cookies', cookies=cookies)
print(r2.text)

运行结果

# r1.text
{
 "cookies": {
  "cookies_are": "cookie1"
 }
}
# t2.text
{
 "cookies": {
  "cookies_are": "cookie2"
 }
}

从结果中可以看出,该方法让cookie只作用了单个请求,因为方法级别的参数不会被跨请求保持,这是requests中session对象的机制,这里不再赘述。那么,如果我们想跨请求保持cookie呢?这里依旧可以应用session对象的跨请求机制,方法如下:

import requests
s = requests.session()
s.cookies.update({'cookies_are': 'cookie'})
r = s.get(url='http://httpbin.org/cookies')
print(r.text)

值得一提的是,除了直接用字典去赋值cookie之外,requests还提供了RequestsCookieJar对象供我们使用,它的行为类似字典,但接口更为完整,适合跨域名跨路径使用。来看一个官方文档中的示例。

import requests
jar = requests.cookies.RequestsCookieJar()
jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies=jar)
print(r.text)

运行结果

{
 "cookies": {
  "tasty_cookie": "yum"
 }
}

从结果中,可以看出我们利用RequestsCookieJar对象,达到了根据不同请求路径,发送不同cookie的效果,进一步增加了操作cookie的灵活性。

参考文档

https://github.com/psf/requests/blob/master/requests/cookies.py

https://requests.readthedocs.io/en/master/user/quickstart/#cookies

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 实现插入排序算法
Jun 05 Python
Django自定义用户认证示例详解
Mar 14 Python
python实现list由于numpy array的转换
Apr 04 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
三步实现Django Paginator分页的方法
Jun 11 Python
Python用字典构建多级菜单功能
Jul 11 Python
python内置模块collections知识点总结
Dec 19 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
Python requests模块session代码实例
Apr 14 #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
You might like
php使用异或实现的加密解密实例
2013/09/04 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
urllib2自定义opener详解
2014/02/07 Python
朴素贝叶斯算法的python实现方法
2014/11/18 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
Python 函数list&read&seek详解
2019/08/28 Python
python 常见的排序算法实现汇总
2020/08/21 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书
2014年教学工作总结
2014/11/13 职场文书
入党函调证明材料
2015/06/19 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android