您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python为什么说此Netscape cookie文件无效?

Python为什么说此Netscape cookie文件无效?

在您的示例代码或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 File\n'
>>> import re
>>> re.search("#( netscape)? HTTP Cookie File", line)
<_sre.SRE_Match object at 0x10fecfdc8>

当我line提示符下键入时,Python将行表示形式反馈给我,包括\n换行符。制表符或Unicode零宽度空格之类的任何意外内容都将在此处显示为转义码。我还验证了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会话中,我使用了stepnext命令的组合来验证正则表达式test(self.magic_re.search(magic))是否实际通过。

python 2022/1/1 18:38:36 有247人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶