18

我正在尝试使用从 Chrome 会话中获得的 cookie登录http://www.steampowered.com网站。

一旦我cookie使用命令SELECT * FROM cookie WHERE host_key LIKE '%steam%'和列名获取了所有表的数据:PRAGMA table_info(cookie)并使用列表理解对所有数据进行了排序,我不知道如何将其全部传递给以requests使 cookie 变得可用。

文档request说您需要传入一个字典,即,但随后一些键会相互覆盖,因为其中一些键是 : ,尽管它们是不同的主机。cookies={'cookies':'are_working'}namenameSteam_Language

编辑:刚刚发现如何在 Python 中将 cookie 添加到现有的 cookielib CookieJar 实例?这可能对我有帮助,但我不知道如何为 cookielib 格式化 Chrome cookie

我的问题是:我如何将几个不同的网站价值 cookie 传递给requests

4

2 回答 2

10

我创建了一个模块来从 Firefox 加载 cookie

请求的示例用法:

import requests
import browser_cookie
cj = browser_cookie.firefox()
r = requests.get(url, cookies=cj)
于 2015-04-14T13:15:24.047 回答
3

请记住,您正在尝试做一些 HTTP 规范有意阻止您做的事情(即将 cookie 发送到它们并非来自的域)。所以你可能从一开始就注定要失败。更糟糕的是,我粗略地看了一下蒸汽动力工具的登录方式,你的工作已经完成了。

回到你的问题...

现在,假设您的蒸汽驱动会话 cookie 是有效的(它们可能不是基于登录页面执行的加密、密钥共享和验证码方法),您可以通过简单地提供一个有效的 cookie 字典作为文档状态。

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,请选择一个。因为最后,很可能只会评估一个,否则服务器将简单地返回一个错误。

于 2012-10-09T04:42:52.537 回答