Python Requests使用Cookie的几种方式详解

 更新时间:2023年07月14日 10:03:17   作者:小青龍  
这篇文章主要给大家介绍了关于Python Requests使用Cookie的几种方式,Python中的requests库可以使用cookie来维持会话状态,实现登录等操作,需要的朋友可以参考下

前言

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

一、通过headers参数使用

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

import requests

get_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=111b
cka=111a;ckb=111b

二、通过cookies参数使用

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

import requests

get_url = "https://postman-echo.com/get"
# cookies 以字典形式提供,cookies 值以字典形式提供,key为cookie_name,value为cookie_value
cookies = {"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=222b
cka=222a; ckb=222b

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

三、通过Session会话使用

通过Session会话管理Cookie,同一会话的多个请求可共享Cookie;

在Session中添加Cookie又有多种方式

方式0:自动设置

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

import requests

session = 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 requests

session = 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 requests

session = 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: <RequestsCookieJar[<Cookie ck2=222 for postman-echo.com/>, <Cookie sails.sid=s%3AZW2JtlIjc1m9D2vVrn1Io57gVB6lVQiK.SjYcItCh92iqDkVF7oI8C6q5P8KmQ5DwB%2BiD4A6Ag48 for postman-echo.com/>]>

注意:<Cookie ck2=222 for postman-echo.com/> 可以看出 设置的 path、domain 成功了

方式3:通过 add_dict_to_cookiejar 方法设置

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

import requests

session = 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 requests

session = 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 requests

session = 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'}

总结

到此这篇关于Python Requests使用Cookie的几种方式的文章就介绍到这了,更多相关Python Requests使用Cookie内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python的sort函数与sorted函数排序问题小结

    python的sort函数与sorted函数排序问题小结

    sort函数用于列表的排序,更改原序列而sorted用于可迭代对象的排序(包括列表),返回新的序列,这篇文章主要介绍了python的sort函数与sorted函数排序,需要的朋友可以参考下
    2023-07-07
  • Python实现手绘图效果实例分享

    Python实现手绘图效果实例分享

    在本篇文章里小编给大家整理了关于Python实现手绘图效果,有需要的朋友们可以学习下。
    2020-07-07
  • Python数据类型相互转换

    Python数据类型相互转换

    当涉及数据类型转换时,Python提供了多种内置函数来执行不同类型之间的转换,本文主要介绍了Python数据类型相互转换,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Python+Turtle实现绘制可爱的小仓鼠

    Python+Turtle实现绘制可爱的小仓鼠

    肉嘟嘟的小动物很是可爱,这篇文章主要为大家介绍一下如何运用Python中的turtle库控制函数绘制小仓鼠,文中的实现方法讲解详细,感兴趣的可以尝试一下
    2022-10-10
  • Python常见异常类型处理

    Python常见异常类型处理

    这篇文章主要个大家分享的是Python常见异常类型处理,编写程序的过程,难免会遇到一些错误,程序逻辑又或者运行与系统发生各种冲突等等,下面我们就来看看那些我们在编程中常遇到的异常都是怎么处理的吧,需要的小伙伴可以参考一下
    2021-12-12
  • pandas如何灵活增加新的空字段

    pandas如何灵活增加新的空字段

    这篇文章主要介绍了pandas如何灵活增加新的空字段问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • python单链路性能测试实践

    python单链路性能测试实践

    这篇文章主要为大家介绍了python单链路性能测试实践示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Python+Django在windows下的开发环境配置图解

    Python+Django在windows下的开发环境配置图解

    Python+Django在windows下的开发环境配置图解教程,需要的朋友可以参考下。
    2009-11-11
  • python 装饰器的使用与要点

    python 装饰器的使用与要点

    python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能;装饰器的返回值也是一个函数对象。简单的说装饰器就是一个用来返回函数的函数
    2021-05-05
  • Python获取Cookie的方法总结

    Python获取Cookie的方法总结

    在Web开发中,Cookie是一种常用的技术,用于在Web服务器和浏览器之间存储和传输数据,本文将详细介绍Python中获取Cookie的方法,包括HTTP请求、Web框架和Cookie管理库的用法,同时提供示例代码来演示这些方法的实际应用,需要的朋友可以参考下
    2023-11-11

最新评论