在Python-Requests中使用Chrome的Cookie

时间:2012-07-29 01:58:18

标签: python google-chrome cookies python-requests steam

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

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

request的{​​{3}}表示你需要传入一个字典,即cookies={'cookies':'are_working'},但之后一些键name会相互覆盖,因为一些name的{​​{1}}是:Steam_Language,但它们是不同的主机。

编辑:刚刚找到docs可能会帮助我,但我不知道如何格式化cookielib的Chrome Cookie

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

2 个答案:

答案 0 :(得分:7)

我创建了a module to load cookies from Firefox

请求的使用示例:

import requests
import browser_cookie
cj = browser_cookie.firefox()
r = requests.get(url, cookies=cj)

答案 1 :(得分:3)

请记住,您正在尝试执行HTTP规范有意阻止您执行的操作(即将Cookie发送到不是来自的域)。所以你可能从一开始就注定要失败。为了让事情变得更糟,我粗略地看一下steampowered实现登录的方式,并为你完成工作。

回到你的问题......

现在,假设您的steampowered会话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 dict中提供所有这些。

并且,如果您有两个同名的cookie,只需选择一个。因为最终,很可能只评估一个,否则服务器只会返回一个错误。