在您的示例代码或cookies.txt文件的副本中,我看不到任何明显错误的内容。
我已经检查了
MozillacookieJar._really_load方法的源代码,该方法引发了您看到的异常。
该方法所做的第一件事是读取您指定的文件的第一行(使用
f.readline()),并用于
re.search查找正则表达式模式
"#(Netscape)? HTTP cookie File"。这是您的文件失败的原因。
看起来 您肯定
cookies.txt会匹配该格式,因此您看到的错误非常令人惊讶。
请注意,您的文件是通过前面的一个简单
open(filename)调用打开的,因此将在具有通用行尾支持的文本模式下打开,这意味着在Windows上运行此文件都没有关系。该代码将看到
n换行符终止的字符串,而不管文件本身使用了什么换行符约定。
在这种情况下,我要做的是 三重检查 文件的第一行是否正确。它需要包含“#HTTP cookie文件”或“#Netscape HTTP
cookie文件”(仅在空格之间,没有制表符,单词之间,大小写匹配)。使用python提示进行测试:
>>> f = open('cookies.txt')>>> line = f.readline()>>> line'# Netscape HTTP cookie Filen'>>> import re>>> re.search("#( Netscape)? HTTP cookie File", line)<_sre.SRE_Match object at 0x10fecfdc8>当我
line在提示符下键入时,Python将行表示形式反馈给我,包括
n换行符。制表符或Unipre零宽度空格之类的任何意外内容都将在此处显示为转义码。我还验证了
cookiejar代码使用的正则表达式是否匹配。
您还可以使用
pdbpython调试器来验证
http.cookiejar模块的实际作用:
>>> import pdb>>> import http.cookiejar>>> jar = http.cookiejar.MozillacookieJar('cookies.txt')>>> pdb.run('jar.load()')> <string>(1)<module>()(Pdb) s--Call--> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1759)load()-> def load(self, filename=None, ignore_discard=False, ignore_expires=False):(Pdb) s> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1761)load()-> if filename is None:(Pdb) s> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1762)load()-> if self.filename is not None: filename = self.filename(Pdb) s> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1765)load()-> f = open(filename)(Pdb) n> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1766)load()-> try:(Pdb) > /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1767)load()-> self._really_load(f, filename, ignore_discard, ignore_expires)(Pdb) s--Call--> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1989)_really_load()-> def _really_load(self, f, filename, ignore_discard, ignore_expires):(Pdb) s> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1990)_really_load()-> now = time.time()(Pdb) n> /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1992)_really_load()-> magic = f.readline()(Pdb) > /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1993)_really_load()-> if not self.magic_re.search(magic):(Pdb) > /opt/local/Library/frameworks/Python.framework/Versions/3.2/lib/python3.2/http/cookiejar.py(1999)_really_load()-> try:在上面的示例pdb会话中,我使用了
step和
next命令的组合来验证正则表达式test(
self.magic_re.search(magic))是否实际通过。



