Python3如何将字典列表形式的多个cookie添加到RequestsCookieJar中
问题原因
你之前使用r.cookies.update(c)的方式是错误的:
update方法仅接收{cookie名称: cookie值}格式的普通键值对字典,你传入包含完整属性的cookie字典时,它会把name、value、domain等字段都当成独立的cookie键存储- 遍历第二个cookie时,字段同名就会覆盖前一个cookie的属性,所以最终只会保留最后一个cookie的相关字段
可行解决方案
直接构造标准Cookie对象,再调用set_cookie方法添加到RequestsCookieJar中,这种方式可以完整保留httpOnly、sameSite等自定义属性,也不会覆盖已有cookie。
完整代码示例
import requests from http.cookiejar import Cookie # 你的Flaresolverr/selenium格式cookie列表 cookies = [ { "name": "ASP.NET_SessionId", "value": "SOMEVALUE", "domain": "sub.mydomain.co.uk", "path": "/", "expires": -1, "size": 41, "httpOnly": true, "secure": false, "session": true }, { "name": "__cfduid", "value": "SOMEVALUE", "domain": ".mydomain.co.uk", "path": "/", "expires": 1622898293.967355, "size": 51, "httpOnly": true, "secure": true, "session": false, "sameSite": "Lax" } ] session = requests.Session() for c in cookies: # 构造标准Cookie实例,非标准属性放到rest参数中 cookie_obj = Cookie( version=0, name=c["name"], value=c["value"], port=None, port_specified=False, domain=c["domain"], domain_specified=True, domain_initial_dot=c["domain"].startswith("."), path=c["path"], path_specified=True, secure=c["secure"], expires=c.get("expires") if c.get("expires") != -1 else None, discard=c.get("session", False), comment=None, comment_url=None, rest={ "HttpOnly": c.get("httpOnly", False), "SameSite": c.get("sameSite") }, rfc2109=False ) # 添加到会话的cookie jar中 session.cookies.set_cookie(cookie_obj) # 验证结果 print(session.cookies)
说明
- 非标准的cookie属性统一放到构造参数
rest字典中即可正常保留,后续会话发起请求时会遵守对应属性规则 - 代码中对
expires=-1做了兼容处理,这类会话级cookie不会写入持久化存储 - 所有原有cookie都会正常存入,不会出现覆盖问题
内容的提问来源于stack exchange,提问作者neile
相关产品推荐
相关产品推荐

