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

5uzkadbs  于 2022-12-02  发布在  Python
关注(0)|答案(3)|浏览(132)

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

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'

我做错了什么?

csga3l58

csga3l581#

cookies有一个类似于字典的接口,您可以使用update()

s.cookies.update(cookie)

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

session.get(url, cookies=cookie)

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

bvuwiixz

bvuwiixz2#

对于多个cookie,这似乎不起作用,它们只是被覆盖,所以最后添加的cookie是jar中唯一的cookie。
例如,我的多个cookie(来自Flasolverr(我相信它的输出与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)
任何帮助都将不胜感激,谢谢!

webghufk

webghufk3#

session.cookie.set_cookie的参数应该是Cookie对象,而不是dict(Cookie的)
如果要从Dict向session.cookies添加新cookie,可以用途:

  • session.cookies.set

更多细节请参考我的另一个职位的答案

相关问题