我正在使用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'
我做错了什么?
答案 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)
非常感谢您的帮助,谢谢!