MozillaCookieJar
继承自FileCookieJar
其构造函数中的以下docstring:
Cookies are NOT loaded from the named file until either the .load() or
.revert() method is called.
同样,就像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
虽然我们设法饼干放进瓶子上面,他们随后被丢弃的cookielib
,因为他们仍然有0
在价值expires
属性。为了避免这种情况,我们必须将到期时间设置为将来的某个时间,如下所示:
for cookie in cj:
# set cookie expire date to 14 days from Now
cookie.expires = time.time() + 14 * 24 * 3600
我同时检查了wget和curl,并都使用了0
过期时间来表示会话cookie,这意味着这是事实上的标准。但是,Python的实现出于相同目的使用空字符串,因此引发了问题。我认为Python在这方面的行为应与wget和curl的行为保持一致,这就是为什么我在http://bugs.python.org/issue17164引发该错误的原因, 我会注意到0
在第5栏中用空字符串替换s输入文件并传递ignore_discard=True
到load()
是解决问题的另一种方法(在这种情况下,无需更改有效时间)。