在 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',但随后一些键names 会相互覆盖,因为其中一些names 是: 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的主要内容,如果未能解决你的问题,请参考以下文章

Python-Requests,从字符串中提取url参数

Python-Requests库的安装和调用

Django 不接受来自 python-requests.patch() 的数据

使用 python-requests 模块更新 Session 中的 Cookie

python-requests 发出 GET 而不是 POST 请求

Python-requests的使用 - SSL证书验证