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 03 Python
Python类属性与实例属性用法分析
May 09 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
Python线程threading模块用法详解
Feb 26 Python
Python如何定义接口和抽象类
Jul 28 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python爬虫scrapy图书分类实例讲解
Nov 23 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学习资源和链接.
2006/12/05 PHP
php 中文和编码判断代码
2010/05/16 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
python框架django项目部署相关知识详解
2019/11/04 Python
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
卫生安全检查制度
2014/02/04 职场文书
红旗方阵解说词
2014/02/12 职场文书
大学班级学风建设方案
2014/05/01 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL
Golang 字符串的常见操作
2022/04/19 Golang