在 Python-Requests 中使用 Chrome 的 cookie
Posted
技术标签:
【中文标题】在 Python-Requests 中使用 Chrome 的 cookie【英文标题】:Using Chrome's cookies in Python-Requests 【发布时间】:2012-07-27 05:00:42 【问题描述】:我正在尝试使用从 Chrome 会话中获得的 cookie 登录 http://www.steampowered.com 网站。
一旦我获取了所有cookie
表的数据,使用命令SELECT * FROM cookie WHERE host_key LIKE '%steam%'
和列名:PRAGMA table_info(cookie)
并使用列表理解对所有数据进行排序,我不知道如何传递它全部发送到requests
,以便 cookie 可用。
request
的docs 表示您需要传入一个字典,即cookies='cookies':'are_working'
,但随后一些键name
s 会相互覆盖,因为其中一些name
s 是: Steam_Language
,虽然他们是不同的主机。
编辑:刚刚发现 How to add cookie to existing cookielib CookieJar instance in Python? 可能对我有帮助,但我不知道如何格式化 cookielib 的 Chrome cookie
我的问题是:如何将几个不同的网站价值 cookie 传递给 requests
?
【问题讨论】:
为什么在您(一次)只向一个域发出请求时将 cookie 传递给所有域? 我认为大约有 4 种不同的 cookie 需要传递到站点,我不确定如何在请求中传递它们。 【参考方案1】:我创建了a module to load cookies from Firefox。
请求的示例用法:
import requests
import browser_cookie
cj = browser_cookie.firefox()
r = requests.get(url, cookies=cj)
【讨论】:
pypi 条目是browsercookie
,它似乎只是在撰写本文时(2017-03)是 python2x。【参考方案2】:
请记住,您正在尝试做一些 HTTP 规范有意阻止您做的事情(即将 cookie 发送到它们不是来自的域)。所以你可能从一开始就注定要失败。更糟的是,我粗略地看了一下蒸汽动力工具的登录方式,你的工作已经完成了。
回到你的问题...
现在,假设您的蒸汽驱动会话 cookie 是有效的(它们可能不是基于登录页面执行的加密、密钥共享和验证码方法),您可能只需提供一个有效的 cookie 即可使用请求库登录dict 作为文档状态。
my_cookies = 'cookiename1': 'cookievalue1', 'cookiename2': 'cookievalue2'
response = requests.get(
'http://www.steampowered.com/mystuff',
cookies=my_cookies)
另外,我不知道您从中获取 cookie 的数据库中存储了哪些数据,但请记住,它们可能存储了带有“Set-Cookie”标头的所有元数据(到期、路径、域等)。这是用户代理(Chrome、IE、请求库等)用来确定在请求中发送哪些 cookie 但不包含在请求中的信息。 'Cookie' 标头只有名称=值对。这就是您需要在 cookie 字典中提供的全部内容。
而且,如果您有两个同名的 cookie,只需选择一个。因为最终,很可能只会评估一个,否则服务器将简单地返回错误。
【讨论】:
以上是关于在 Python-Requests 中使用 Chrome 的 cookie的主要内容,如果未能解决你的问题,请参考以下文章
Django 不接受来自 python-requests.patch() 的数据
使用 python-requests 模块更新 Session 中的 Cookie