繁体   English   中英

尝试将 cookie 加载到字典中的请求 session

[英]Trying to load cookie into requests session from dictionary

我正在使用 python 请求库。 我正在尝试使用字典中的 cookie 加载请求 session:

cookie = {'name':'my_cookie','value': 'kdfhgfkj' ,'domain':'.ZZZ.org', 'expires':'Fri, 01-Jan-2020 00:00:00 GMT'}

我试过了:

s.cookies.set_cookie(cookie)

但这给出了:

File "....lib\site-packages\requests\cookies.py", line 298, in set_cookie
    if hasattr(cookie.value, 'startswith') and cookie.value.startswith('"') and cookie.value.endswith('"'):
AttributeError: 'dict' object has no attribute 'value'

我究竟做错了什么?

cookies具有类似于字典的界面,您可以使用update()

s.cookies.update(cookie)

或者,只需将cookies添加到下一个请求:

session.get(url, cookies=cookie)

它将“合并”请求cookie和会话cookie,新添加的cookie将保留用于后续请求,另请参见:

对于多个 cookies,这似乎对我不起作用,它们只是被覆盖,所以最后添加的是 jar 中唯一的 cookie。

例如,我的多个 cookies(来自 Flaresolverr(我相信它与 selenium 相同的 output))在一个列表中输出多个字典,例如:

cookies = [
      {
        "name": "ASP.NET_SessionId",
        "value": "SOMEVALUE",
        "domain": "my.domain.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 jar 中,您会看到“ __cfduid ”是 jar 中唯一的 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)

任何帮助将不胜感激,谢谢!

session.cookies.set_cookie的参数应该是Cookie object ,不是dict (of cookie)

如果你想从 dict 添加新的 cookie 到session.cookies ,你可以使用:

要么

更详细的请参考我另一个帖子的回答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM