我正在尝试使用我在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
?
答案 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,只需选择一个。因为最终,很可能只评估一个,否则服务器只会返回一个错误。