【发布时间】:2016-08-06 12:39:39
【问题描述】:
我在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”,为什么我没有收到它们?
【问题讨论】:
-
req.headers显示服务器发送了什么?那里有任何 Set-Cookie 标头吗?如果没有,那么服务器没有发送任何 cookie。 -
我在
req.headers上没有找到任何Set-Cookie,但在Chrome 上我可以清楚地看到使用扩展程序的两个cookie。为什么我的脚本上看不到它们? -
Cookies 总是从服务器发送到带有
Set-Cookie标头的客户端。 cookie 存在于 Chrome 中并不意味着它们是由您现在发布的 URL 设置的;它们可以由 不同的 URL 设置。您需要找到服务器发出Set-Cookie标头的 URL。 -
嗯,好的,谢谢。请发布它,以便我标记正确答案。
标签: python cookies python-requests