requests cookiejar - 从字典列表中发送多个 cookie
Posted
技术标签:
【中文标题】requests cookiejar - 从字典列表中发送多个 cookie【英文标题】:requests cookiejar - send multiple cookies from list of dictionaries 【发布时间】:2021-05-06 14:51:43 【问题描述】:我希望有人可以帮助我从字典列表中创建一个包含多个 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 格式返回,而不是会话本身的一部分。
我已经进行了大量搜索,但找不到任何有效的方法 - 任何帮助将不胜感激,谢谢!
【问题讨论】:
没人有什么想法吗? :( 【参考方案1】:您要查找的方法是 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() 方法接受的属性匹配的名称/值对。
【讨论】:
以上是关于requests cookiejar - 从字典列表中发送多个 cookie的主要内容,如果未能解决你的问题,请参考以下文章
requests.Session()从CookieJar加载cookie
关于cookiejar(),requests.session()中cookie的详细操作方法