我在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/