python - 请求 - 无法处理两个具有相同名称、不同域的 cookie

标签 python cookies python-requests

我正在使用 Requests 编写一个 Python 2.7 脚本来自动访问一个网站,该网站设置了两个名称相同但域不同的 cookie,例如名称为“mycookie”,域为“www.example.com”和“subdomain.example.com”。我的客户端脚本需要读取这些 cookie 中的一个 的值,并将其作为参数包含在后续请求中。因为 requests.Session 中的 cookie 访问似乎仅由 cookie 名称键入,所以我看不到提取正确 cookie 值的方法。实际上,尝试使用该名称访问 cookie 会产生此错误:

  value = session.cookies["mycookie"]
File "/usr/lib/python2.7/site-packages/requests/cookies.py", line 276, in __getitem__
  return self._find_no_duplicates(name)
File "/usr/lib/python2.7/site-packages/requests/cookies.py", line 326, in _find_no_duplicates
  raise CookieConflictError('There are multiple cookies with name, %r' % (name))
requests.cookies.CookieConflictError: There are multiple cookies with name, 'mycookie'

这表明 Requests 是在假设每个 session 的 cookie 名称都是唯一的情况下编写的。然而,正如证明的那样,这不一定是真的。

我想我可以通过维护两个 session 并在它们之间手动复制其他重要的 cookie 来解决这个问题。但是,我想知道这是否是 Requests 的已知限制,如果是,建议的解决方法是什么?

最佳答案

Session.cookies 不是字典,它是 RequestsCookieJar。尝试使用方法 RequestsCookieJar.get(),其定义如下:

def get(self, name, default=None, domain=None, path=None):
    """Dict-like get() that also supports optional domain and path args in
    order to resolve naming collisions from using one cookie jar over
    multiple domains. Caution: operation is O(n), not O(1)."""
    try:
        return self._find_no_duplicates(name, domain, path)
    except KeyError:
        return default

对于您的代码,这意味着更改为:

value = session.cookies.get("mycookie", domain=relevant_domain)

至于请求,我们知道 cookie 名称不是唯一的。 =)

关于python - 请求 - 无法处理两个具有相同名称、不同域的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586779/

相关文章:

python - 从一个条件到另一个条件选择数据框行

javascript - jquery.cookie 可以将对象作为值处理吗?

security - 保护 Google 跟踪 cookie

python - 400 客户端错误 : Bad Request for url: https://api. dropboxapi.com/2/files/list_folder

python - 为什么调用 cv2.VideoCapture() 会改变 v4l 相机的像素格式?

python - 子图按相反顺序

security - "Improved Persistent Login Cookie Best Practice"中的漏洞有解决方案吗?

ubuntu - 如何在 Ubuntu 15.04 中安装新的请求库

python - 使用 requests.post() 从网页中抓取文本

python - Django 模板中的 Rowspan 和分组