MozillaCookieJar
继承自FileCookieJar
which 在其构造函数中具有以下文档字符串:
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提出了适当的错误
编辑
会话 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 中,但它们随后被丢弃,cookielib
因为它们在属性中仍然具有0
值。expires
为了防止这种情况,我们必须将过期时间设置为将来的某个时间,如下所示:
for cookie in cj:
# set cookie expire date to 14 days from now
cookie.expires = time.time() + 14 * 24 * 3600
编辑 3
我检查了 wget 和 curl 并且都使用0
过期时间来表示会话 cookie,这意味着它是事实上的标准。然而 Python 的实现使用空字符串来达到同样的目的,因此问题中提出了问题。我认为 Python 在这方面的行为应该与 wget 和 curl 所做的一致,这就是为什么我在http://bugs.python.org/issue17164
提出了这个错误
我会注意到0
在第 5 列用空字符串替换 s输入文件并传递ignore_discard=True
给load()
是解决问题的替代方法(在这种情况下无需更改到期时间)。