python - Requestscookiejar 为空,即使页面有它

标签 python cookies python-requests

我在Python 3.5.1,使用requests,相关部分代码如下:

req = requests.post(self.URL, data={"username": username, "password": password}) 
self.cookies = {"MOODLEID1_": req.cookies["MOODLEID1_"], "MoodleSession": req.cookies["MoodleSession"]}

self.URL 有正确的页面,POST 按预期工作,我做了一些打印检查,它通过了。

我的输出:

Traceback (most recent call last):
  File "D:/.../main.py", line 14, in <module>
    m.login('first.last', 'pa$$w0rd!')
  File "D:\...\moodle2.py", line 14, in login
    self.cookies = {"MOODLEID1_": req.cookies["MOODLEID1_"], "MoodleSession": req.cookies["MoodleSession"]}
  File "D:\...\venv\lib\site-packages\requests\cookies.py", line 287, in __getitem__
    return self._find_no_duplicates(name)
  File "D:\...\venv\lib\site-packages\requests\cookies.py", line 345, in _find_no_duplicates
    raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
KeyError: "name='MOODLEID1_', domain=None, path=None"

我试图在运行时调试以检查 req.cookies 有什么。但我得到的是令人惊讶的,至少对我来说是这样。如果您在 self.cookies = {...} 上放置断点并运行 [(c.name, c.value, c.domain) for c in req.cookies] 我得到一个空列表,好像里面没有任何 cookie。

该网站确实会发送 cookie,通过 Chrome 扩展程序进行检查,我找到了 2 个“MOODLEID1_”和“MoodleSession”,那么为什么我没有收到它们呢?

最佳答案

响应似乎不包含任何 cookie。在 req.headers 中查找一个或多个 Set-Cookie header 。

存储在浏览器中的 Cookie 之所以存在,是因为每个 cookie 的响应都包含一个 Set-Cookie header 。您必须找到服务器设置这些 cookie 的响应;显然这不是这个的回应。

如果您需要跨请求保留这些 cookie(一旦设置),请使用 requests.Session() object ;这将保留响应返回的任何 cookie,并根据新请求再次发送它们。

关于python - Requestscookiejar 为空,即使页面有它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631916/

相关文章:

python - 向量化连续 numpy 计算

python - 如何读取一个非常大的文本文件的最后 MB

python - 序列化器中的ArrayField

cookies - 如何强制在第一页加载时设置 __utmz cookie

javascript - 跨页面缓存客户端代码结果

Python GET 中的请求错误,但 wget 和curl 可以工作

python - 为什么 python requests.post 接受 json 数据而不接受字典

python - Python 中二叉搜索树的广度优先搜索

cookies - RabbitMQ,Erlang:如何 “make sure the erlang cookies are the same”

python - 如何抓取实时计算的值