文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python Requests使用Cookie的几种方式

2023-09-06 22:29

关注

Requests使用Cookie的几种方式

这篇文章将总结 Python Requests库中接口请求时使用Cookie的几种方式,文章使用 Postman 官网提供的接口进行演示 https://postman-echo.com/

一、通过headers参数使用

通过headers参数使用cookie,key为Cookie,值为使用;拼接的 cookie_name=cookie_value 字符串

import requestsget_url = "https://postman-echo.com//get"# key为Cookie,值为使用;拼接的 cookie_name=cookie_value 字符串headers = {"Cookie":"cka=111a;ckb=111b"}res = requests.get(url=get_url,headers=headers)print(res.json().get("headers").get("cookie"))print(res.request.headers.get("Cookie"))

输出如下:

cka=111a;ckb=111bcka=111a;ckb=111b

二、通过cookies参数使用

通过cookies参数使用cookie,cookies 值以字典形式提供,key为cookie_name,value为cookie_value

import requestsget_url = "https://postman-echo.com//get"# cookies 以字典形式提供,cookies 值以字典形式提供,key为cookie_name,value为cookie_valuecookies = {"cka":"222a","ckb":"222b"}res = requests.get(url=get_url,cookies=cookies)print(res.json().get("headers").get("cookie"))print(res.request.headers.get("Cookie"))

输出:

cka=222a; ckb=222bcka=222a; ckb=222b

注意:同时通过headers,cookies 参数传递Cookie时,只有headers传递的Cookie有效。

三、通过Session会话使用

通过Session会话管理Cookie,同一会话的多个请求可共享Cookie;
在Session中添加Cookie又有多种方式

方式0:自动设置

在会话过程中,如果有接口响应头中有 set-cookie,则将自动添加到会话的Cookie中

import requestssession = requests.session()print("会话初始cookie:",dict(session.cookies))get_url = "https://postman-echo.com//get"res = session.get(url=get_url)print("响应头中set-cookie:",res.headers.get("set-cookie"))print("会话现有cookie:",dict(session.cookies))

输出:

会话初始cookie: {}响应头中set-cookie: sails.sid=s%3ALo1-iQfueg8z1DhR_SX3KxwWA85cYN65.asZ1elFlT9g54uj%2FHkHpaZFkk0rBaCFDtRrA9anWzY4; Path=/; HttpOnly会话现有cookie: {'sails.sid': 's%3ALo1-iQfueg8z1DhR_SX3KxwWA85cYN65.asZ1elFlT9g54uj%2FHkHpaZFkk0rBaCFDtRrA9anWzY4'}

方式1:通过key设置

直接通过key设置cookie,但不支持设置cookie的 path、domain 等值

import requestssession = requests.session()print("会话初始cookie:",dict(session.cookies))# 直接通过key设置cookie,但不支持设置cookie的 path、domain 等值session.cookies["cka"]="111a"session.cookies["ckb"]="111b"get_url = "https://postman-echo.com//get"res = session.get(url=get_url)print("本次请求使用的cookie:",res.request.headers.get("Cookie"))print("会话现有cookie:",dict(session.cookies))

输出:

会话初始cookie: {}本次请求使用的cookie: cka=111a; ckb=111b会话现有cookie: {'cka': '111a', 'ckb': '111b', 'sails.sid': 's%3AxtcEChogQfCYrRm9HDwAOFa4VlQQDsCZ.OR1TBpmuhX%2F2qI7mpTE0NdChrphD5AUcvcRqUF2y6NU'}

方式2:通过set 方法设置

通过set方法设置cookie,且支持设置path、domain等值

import requestssession = requests.session()print("会话初始cookie:",dict(session.cookies))# 通过set方法设置cookie,且支持设置path、domain等值session.cookies.set("ck2","222",path="/",domain="postman-echo.com")get_url = "https://postman-echo.com//get"res = session.get(url=get_url)print("本次请求使用的cookie:",res.request.headers.get("Cookie"))print("会话现有cookie:",session.cookies)

输出:

会话初始cookie: {}本次请求使用的cookie: ck2=222会话现有cookie: , ]>

注意: 可以看出 设置的 path、domain 成功了

方式3:通过 add_dict_to_cookiejar 方法设置

通过 requests.utils 工具包里的 add_dict_to_cookiejar 方法设置cookie,但不支持设置 path、domain 等值

import requestssession = requests.session()print("会话初始cookie:",dict(session.cookies))# 通过 requests.utils 工具包里的 add_dict_to_cookiejar 方法设置cookie,但不支持设置 path、domain 等值cookie_dict = {"ck3a":"333a","ck3b":"333b"}requests.utils.add_dict_to_cookiejar(session.cookies,cookie_dict=cookie_dict)get_url = "https://postman-echo.com//get"res = session.get(url=get_url)print("本次请求使用的cookie:",res.request.headers.get("Cookie"))print("会话现有cookie:",dict(session.cookies))

输出:

会话初始cookie: {}本次请求使用的cookie: ck3a=333a; ck3b=333b会话现有cookie: {'ck3a': '333a', 'ck3b': '333b', 'sails.sid': 's%3AFY_7nq-hA_v9BxPaft4BHgRNiZOmDZ1S.N64IaIZ2Dd2fnfDMawbXdmJl0HfUVN7hhhGrdaFE4Bs'}

方式4:通过 RequestsCookieJar() 对象设置

创建一个空 RequestsCookieJar()对象,然后使用对象的set方法赋值,然后update更新到当前会话cookie,支持设置 path、domain等值

import requestssession = requests.session()print("会话初始cookie:",dict(session.cookies))# 创建一个空 RequestsCookieJar()对象,然后使用对象的set方法赋值,然后update更新到当前会话cookie,支持设置 path、domain等值ckj = requests.sessions.RequestsCookieJar()ckj.set('ck4a', '444a', path='/', domain='postman-echo.com')session.cookies.update(ckj)get_url = "https://postman-echo.com//get"res = session.get(url=get_url)print("本次请求使用的cookie:",res.request.headers.get("Cookie"))print("会话现有cookie:",dict(session.cookies))

输出:

会话初始cookie: {}本次请求使用的cookie: ck4a=444a会话现有cookie: {'ck4a': '444a', 'sails.sid': 's%3ANU88BiSVQAFpVUtrvSrii14jOhO_q981.MfJkY7Aw93R0Rc4V6JGi7SXPOneNJTr3p%2FNVJ9yp4Qg'}

方式5:通过 cookiejar_from_dict 方法设置

通过 requests.utils 工具包里的 cookiejar_from_dict 方法将字典格式的cookie转换为cookiejar对象,然后update更新到当前会话,不支持设置 path、domain 等值

import requestssession = requests.session()print("会话初始cookie:",dict(session.cookies))# 通过 requests.utils 工具包里的 cookiejar_from_dict 方法将字典格式的cookie转换为cookiejar对象,然后update更新到当前会话,不支持设置 path、domain 等值cookie_dict = {"ck5a":"555a","ck5b":"555b"}ckj5 = requests.utils.cookiejar_from_dict(cookie_dict=cookie_dict)session.cookies.update(ckj5)get_url = "https://postman-echo.com//get"res = session.get(url=get_url)print("本次请求使用的cookie:",res.request.headers.get("Cookie"))print("会话现有cookie:",dict(session.cookies))

输出:

会话初始cookie: {}本次请求使用的cookie: ck5a=555a; ck5b=555b会话现有cookie: {'ck5a': '555a', 'ck5b': '555b', 'sails.sid': 's%3AWHa__ab1vTZVjGdlIpDgDFfntSYNqS2Y.y%2Fq4YhPv49C5jwNiYdVWrFsQm9B0Y202rI5xRrqlwsk'}

来源地址:https://blog.csdn.net/B11050729/article/details/131293769

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯