尝试将cookie从字典加载到请求会话中

时间:2015-08-10 20:52:16

标签: python session cookies python-requests

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

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'

我做错了什么?

2 个答案:

答案 0 :(得分:5)

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

s.cookies.update(cookie)

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

session.get(url, cookies=cookie)

它会将请求cookie与会话cookie“合并”,并为后续请求保留新添加的cookie,另请参阅:

答案 1 :(得分:0)

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

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

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)

非常感谢您的帮助,谢谢!