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的词法分析与语法分析
May 18 Python
win7上python2.7连接mysql数据库的方法
Jan 14 Python
老生常谈Python序列化和反序列化
Jun 28 Python
Python中turtle作图示例
Nov 15 Python
python中Apriori算法实现讲解
Dec 10 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
Python 实现RSA加解密文本文件
Dec 30 Python
Pandas数据结构之Series的使用
Mar 31 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回溯法解决0-1背包问题实例分析
2015/03/23 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
2013/04/23 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
python中List的sort方法指南
2014/09/01 Python
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
什么是Python中的顺序表
2020/06/02 Python
python如何调用java类
2020/07/05 Python
python 实现单例模式的5种方法
2020/09/23 Python
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
物业招聘计划书
2014/01/10 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
项目安全员岗位职责
2015/02/15 职场文书