python - 读取 curl 创建的 cookies 文件

标签 python curl cookies

我通过 curl 保存了以下 cookie(在 test.txt 中,制表符分隔,此编辑器不保留制表符):

# Netscape HTTP Cookie File
# http://curlm.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_my-example.com    FALSE   /   FALSE   0   _rails-root_session test

我正在尝试使用以下代码阅读它:

import sys

if sys.version_info < (3,):
    from cookielib import Cookie, MozillaCookieJar
else:
    from http.cookiejar import Cookie, MozillaCookieJar

def load_cookies_from_mozilla(filename):
    ns_cookiejar = MozillaCookieJar()
    ns_cookiejar.load(filename, ignore_discard=True)
    return ns_cookiejar

cookies = load_cookies_from_mozilla("test.txt")
print (len(cookies))

它输出 0(无法读取 cookie)。 如果我手动将我的 cookie 修改为以下行(删除 HttpOnly 标志并将 0 更改为过期时间的空字符串,并再次以制表符分隔):

my-example.com  FALSE   /   FALSE       _rails-root_session test

然后输出1(成功读取cookie)。

需要对我的 python 代码做些什么才能读取原始 cookie 行?并且最好能够以相同的格式保存它(使用 HttpOnly 标志和 0 而不是用于永不过期 cookie 的空字符串)?

谢谢。

最佳答案

这似乎是一个 Unresolved 错误:https://bugs.python.org/issue2190 .

此错误报告包含指向解决方法的链接:https://gerrit.googlesource.com/git-repo/+/master/subcmds/sync.py#995

在该链接代码中,开发人员创建了一个临时 cookie 文件,删除了“#HttpOnly_”前缀,然后使用该临时文件创建了一个 cookiejar。

tmpcookiefile = tempfile.NamedTemporaryFile()
tmpcookiefile.write("# HTTP Cookie File")
try:
  with open(cookiefile) as f:
    for line in f:
      if line.startswith("#HttpOnly_"):
       line = line[len("#HttpOnly_"):]
      tmpcookiefile.write(line)
  tmpcookiefile.flush()
  cookiejar = cookielib.MozillaCookieJar(tmpcookiefile.name)
  try:
    cookiejar.load()
  except cookielib.LoadError:
    cookiejar = cookielib.CookieJar()
finally:
  tmpcookiefile.close()

关于python - 读取 curl 创建的 cookies 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400140/

相关文章:

python - 如何获取 Pandas DataFrame 中的值索引?

python - 如何同步python列表?

json - "Unexpected token in JSON at position 0"在具有有效 JSON 的 Node 中使用 JSON.parse

php - cookie 中的数组,使用 pdo 查询访问

java - 在selenium中设置cookie

python - 浏览列表并获取每对项目

python - SSL 证书验证失败 (_ssl.c :600)

PHP cURL POST 请求无法发送?

sockets - 带有代理的lua https请求返回501错误代码

php - php中的 session 深度很小