gpt4 book ai didi

python - 在 Python 请求中使用 cookies.txt 文件

转载 作者:太空狗 更新时间:2023-10-29 18:03:58 27 4
gpt4 key购买 nike

我正在尝试使用带有 Python 请求的 cookies.txt 文件(使用 Chrome 扩展程序生成)访问经过身份验证的网站:

import requests, cookielib

cj = cookielib.MozillaCookieJar('cookies.txt')
cj.load()
r = requests.get(url, cookies=cj)

它不会抛出任何错误或异常,但会错误地生成登录屏幕。但是,我知道我的 cookie 文件是有效的,因为我可以通过 wget 使用它成功检索我的内容。知道我做错了什么吗?

编辑:

我正在跟踪 cookielib.MozillaCookieJar._really_load 并且可以验证 cookie 是否被正确解析(即它们具有正确的 domainpath 值secure 等 token )。但是由于交易仍然导致登录表单,看来 wget 必须做一些额外的事情(因为完全相同的 cookies.txt 文件适用于它)。

最佳答案

MozillaCookieJar 继承自 FileCookieJar,其构造函数中包含以下文档字符串:

Cookies are NOT loaded from the named file until either the .load() or
.revert() method is called.

然后你需要调用.load()方法。

此外,正如 Jermaine Xu 指出的那样,文件的第一行需要包含 # Netscape HTTP Cookie File# HTTP Cookie File 字符串。您使用的插件生成的文件不包含这样的字符串,因此您必须自己插入。我在 http://code.google.com/p/cookie-txt-export/issues/detail?id=5 提出了适当的错误

编辑

session cookie 在第 5 列中保存为 0。如果您不将 ignore_expires=True 传递给 load() 方法,则所有此类 cookie 在从文件加载时都会被丢弃。

文件session_cookie.txt:

# Netscape HTTP Cookie File
.domain.com TRUE / FALSE 0 name value

Python 脚本:

import cookielib

cj = cookielib.MozillaCookieJar('session_cookie.txt')
cj.load()
print len(cj)

输出:0

编辑 2

虽然我们设法将 cookie 放入上面的 jar 中,但它们随后是 discarded通过 cookielib 因为它们在 expires 属性中仍然有 0 值。为了防止这种情况,我们必须 set像这样的 future 某个时间的过期时间:

for cookie in cj:
# set cookie expire date to 14 days from now
cookie.expires = time.time() + 14 * 24 * 3600

编辑 3

我检查了 wget 和 curl,都使用 0 过期时间来表示 session cookie,这意味着它是事实上的标准。然而,Python 的实现出于相同目的使用空字符串,因此问题中提出了问题。我认为 Python 在这方面的行为应该与 wget 和 curl 的行为一致,这就是我在 http://bugs.python.org/issue17164 提出错误的原因。
我会注意到,将输入文件第 5 列中的 0 替换为空字符串并将 ignore_discard=True 传递给 load() 是解决问题的替代方法(在这种情况下无需更改到期时间)。

关于python - 在 Python 请求中使用 cookies.txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com