我正在尝试使用我的帐户登录网站。在 python 代码中,我使用:
login_response = session.post('mysite.com', login_data, cookies=session.cookies)
其中session是请求会话对象,cookie 正是我在浏览器中尝试相同时发送的 cookie(当我登录时作为请求的一部分由浏览器发送的两个特定 cookie), login_data是在 post 请求中发送的表单数据字典。
但是,预期的响应是:代码 303,发送了一个重定向链接,以及两个新的 cookie(即使用登录会话)。这就是在浏览器中发生的事情。当我想使用上面的代码执行此操作时,我得到的是代码 200,没有重定向链接,也没有 cookie。就好像网站只是“重新加载”。表单数据本身(密码+用户)是正确的。
我从浏览器中读取了请求内容:
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="login__standard_submitted"
1
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="csrfKey"
2fcc7af2aa54f0e3ab85a6bdeca26f98
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="ref"
aHR0cHM6Ly9jcmltZW1hcmtldC53by8=
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="MAX_FILE_SIZE"
20971520
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="plupload"
92ee7fd8f0a2249c2327184c5b95d6c9
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="auth"
myusername
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="password"
password
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="remember_me"
0
-----------------------------366521339228594542373308740035
Content-Disposition: form-data; name="remember_me_checkbox"
1
-----------------------------366521339228594542373308740035--
我从中得到的数据,我只是写进了一个键字典:值,例如
'auth': 'myusername'
又是一个tl;dr: 我发送了正确的 cookie 以及在代码中执行 POST 请求时我观察到的看似正确的数据。但是,我得到的结果与在浏览器中完全不同,并且无法登录。
我是不是误会了什么?我需要更改什么才能通过代码登录?
编辑:在标题中,我还将'Content-Type'设置为'multipart/form-data',就像在浏览器中一样。编辑 2:相反,如果我将login_data设置为files=
,它仍然不起作用。