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

时间:2014-12-21 04:41:23

标签: python cookies python-requests

我正在编写一个Python 2.7脚本,使用Requests自动访问一个网站,该网站设置两个具有相同名称但不同域名的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'

这表明请求的编写假设每个会话的cookie名称是唯一的。然而,正如所证明的那样,这并不一定正确。

我想我可以通过维护两个会话并手动复制它们之间的其他重要cookie来解决这个问题。但是,我想知道这是否是已知的请求限制,如果是这样,推荐的解决方法可能是什么?

1 个答案:

答案 0 :(得分:4)

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名称不是唯一的。 =)