首页 > 解决方案 > 为什么在 python 中向 http cookiejar 添加 cookie 如此困难?我总是以 CookieError: Attempt to set a reserved key 'domain' 结束

问题描述

我已经阅读了我能找到的与该主题相关的所有问题,但没有一个是有帮助和/或相关的。

我正在使用带有 Asyncio 和 aiohttp 的 playwright 来自动化一些基于 Web 的任务。该工作流程的一部分涉及获取和重用 cookie。我使用剧作家context.storage_state()从存储中获取所有内容。它返回 adict存储中的所有内容,如下所示:

{
  "cookies": [
    {
        'name': 'cookie_name', 
        'value': 'cookie_value', 
        'domain': '.website.com', 
        'path': '/', 
        'expires': 1234567890, 
        'httpOnly': False, 
        'secure': False, 
        'sameSite': 'None'
    },
    ...
  ],
  "origins": [
    {
      "origin": "https://www.website.com",
      "localStorage": [
        {
          "name": "name",
          "value": "value"
        },
        ...
      ]
    }
  ]
}

我使用 cookie 抓取storage['cookies']它们,然后遍历它们,尝试将每个添加到 中aiohttp.CookieJar(),我很确定它只是一个http.cookiejar.CookieJar()对象。每次我尝试将其中一个字典作为 cookie 加载到 cookie 罐中时,我都会得到一个

CookieError: Attempt to set a reserved key 'domain'

我查看了 RFC2109 标准和源代码:https ://github.com/python/cpython/blob/3.9/Lib/http/cookies.py

无论我尝试什么,我都会遇到错误。

我努力了:

jar = aiohttp.CookieJar() # basically http.cookiejar.CookieJar I think
storage = context.storage_state()

for cookie in storage['cookies']:
    jar.update_cookies(cookie)
for item in storage['cookies']:
    cookie = BaseCookie().load(str(item)) # not even sure why I tried this
    jar.update_cookies(cookie)
for item in storage['cookies']:
    cookie = BaseCookie().load(item)
    jar.update_cookies(cookie)
for item in storage['cookies']:
    cookie = SimpleCookie().load(item)
    jar.update_cookies(cookie)

我还尝试从 cookie 字典中删除所有“保留”键,即使这是 cookie 数据的大部分。无论如何,它都不会让我将实际的 cookie 加载到 cookie 罐中。我通读了 HTTP cookie.py 源代码和文档,据我所知,其中没有任何内容可以解释我正在做的事情有什么问题。

任何人都能够在不通过会话的情况下将 cookie 加载到 cookie jar 对象中吗?

标签: pythonhttpcookiescookiejar

解决方案


推荐阅读