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 爬虫学习笔记之单线程爬虫
Sep 21 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 Python
对Python中type打开文件的方式介绍
Apr 28 Python
python邮件发送smtplib使用详解
Jun 16 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
简单了解django缓存方式及配置
Jul 19 Python
opencv3/C++ 平面对象识别&透视变换方式
Dec 11 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 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/06/06 PHP
php反射应用示例
2014/02/25 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
python numpy存取文件的方式
2020/04/01 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
英国儿童图书网站:Scholastic
2017/03/26 全球购物
驾驶员岗位职责
2014/01/29 职场文书
办公室副主任职责范本
2014/03/08 职场文书
学校个人对照检查材料
2014/08/26 职场文书
授权收款委托书范本
2014/10/10 职场文书
交通事故被告代理词
2015/05/23 职场文书
python小程序之飘落的银杏
2021/04/17 Python
go 实现简易端口扫描的示例
2021/05/22 Golang
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
MySQL优化及索引解析
2022/03/17 MySQL