python - requests cookiejar - 从字典列表中发送多个 cookie
问题描述
我希望有人可以帮助我从字典列表中创建一个包含多个 cookie 的 cookie jar。这是在python3中。
我尝试了几种不同的方法,但它们要么覆盖以前的 cookie,要么不接受非标准的 cookie 属性(例如 httpOnly)
cookie 从 Flaresolverr (我相信它与 selenium 的输出相同)作为列表中的多个字典返回,例如:
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"
}
]
因此,如果我尝试将它们全部添加到 cookie 罐中,您会看到“ __cfduid
”是罐中唯一的 cookie:
r = requests.session()
for c in cookies:
r.cookies.update(c)
print(r.cookies)
<RequestsCookieJar[<Cookie domain=.mydomain.co.uk for />, <Cookie expires=1622898293.967355 for />, <Cookie httpOnly=True for />, <Cookie name=__cfduid for />, <Cookie path=/ for />, <Cookie sameSite=Lax for />, <Cookie secure=True for />, <Cookie session=False for />, <Cookie size=51 for />, <Cookie value=SOMEVALUE for />]>
我也尝试过jar = requests.cookies.RequestsCookieJar()
,jar.set(xxxx)
但它不喜欢非标准的 cookie 属性(例如 httpOnly)
我不能r= requests.get
从 r.cookies 中获取 cookie,因为 cookie 在 requests.text(或 requests.json)中作为 json 返回,而不是作为会话本身的一部分。
我已经做了很多搜索,但找不到任何有用的东西 - 任何帮助将不胜感激,谢谢!
解决方案
您正在寻找的方法是 set(),而不是 update()。它可以将其所有参数作为关键字参数,但它必须与http.cookiejar所记录的相匹配。此外,会话参数在 Cookie 对象中称为丢弃。通过一些列表推导,我们可以将其转换为所需的形式:
cookie_props = ['name', 'value', 'port', 'domain', 'path', 'expires', 'secure', 'discard']
cookiejar = [dict([(k, item['session' if k == 'discard' else k])
for k in cookie_props if k in item]) for item in cookies]
r = requests.session()
for c in cookiejar:
r.cookies.set(**c)
print(r.cookies)
print(len(r.cookies))
列表解析将会话重命名为丢弃,并且仅复制与http.cookiejar上的 set() 方法接受的属性匹配的名称/值对。
推荐阅读
- python - NetworkX 在 spring_layout 之后添加节点到图中
- sql-server - 将 int 转换为 hh:mm 格式
- asp.net - ASP.NET 在 EF 数据库中存储时间跨度
- gremlin - Gremlin - 如何在获得最短路径时过滤属性边缘
- oracle - oracle 表中的 CURRENT_TIMESTAMP
- c# - 以不同用户身份从备份恢复 SQL 数据库
- excel - 使用 VBA 将 ListColumn 从一个表复制到另一个表时没有错误也没有数据
- python - Pyinstaller - 错误消息:名称 Actor 未定义
- android - 如何在我的项目结构中设置位置?
- java - 如何在 mockito 中模拟地图?