首页 > 解决方案 > 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 返回,而不是作为会话本身的一部分。

我已经做了很多搜索,但找不到任何有用的东西 - 任何帮助将不胜感激,谢谢!

标签: pythoncookiespython-requestscookiejar

解决方案


您正在寻找的方法是 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() 方法接受的属性匹配的名称/值对。


推荐阅读