python - 无法使用Python中的请求库登录

标签 python authentication python-requests basic-authentication

我正在尝试打开此website ,并使用 requests 访问仪表板的信息python 中的库。这是一种网络抓取,但问题是我无法登录。我尝试了多种不同的方法来发布我的登录凭据,但到目前为止没有任何效果。

网站 - https://www.handy.com/login

登录 HTML - <input autofocus="autofocus" class="string email required" id="user_session_email" name="user_session[email]" required="required" size="50" type="email">

密码 HTML - <input class="password required" id="user_session_password" name="user_session[password]" required="required" size="50" type="password">

代码:

首先我尝试使用用户名和密码的名称属性

import requests
url = "https://www.handy.com/login"
payload = {"user_session[email]": "email or username", "user_session[password]": "password"}
r = requests.post(url, data=payload)
print r.status_code
print r.reason

还尝试使用 username and password 的 id 属性但问题是一样的。状态代码为500原因是 Internal Server Error 。我知道如何创建持久 session ,但如果您能帮助我登录网站,我将不胜感激。

最佳答案

首先,当需要身份验证并且必须为进一步的请求维护 session 时,requests.session 对象是执行此操作的预期方法。

这涉及创建一个 session 对象并使用它来发送 POST 请求。

session = requests.session() r = session.post(url, data=payload)

您将遇到的另一个问题是您没有发送与浏览器相同的有效负载(或者更重要的是,没有像服务器期望的那样),这就是内部服务器错误所指示的。

如果您使用的是 Firefox,您可以使用 Ctrl-Shift-Q 打开网络监视器窗口,选择浏览器发出的用于发送您的登录详细信息的 POST 请求,然后转到“参数”选项卡,您将在其中看到类似的内容这个:

enter image description here

因此,您最初需要做的是使用 session 对象向登录页面发出 GET 请求。您需要从您刚刚从此请求收到的 HTML 中解析 authenticity_token。然后,您可以使用此 token 以及电子邮件和密码来发出对网站进行身份验证的 POST 请求。

关于python - 无法使用Python中的请求库登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37934155/

相关文章:

python - 如何将字典+列表组合成一个排序列表

android - 无法在 Google 登录时选择不同的帐户

python - YouTube 中的 Requests 与 Selenium Python

python - SSL:尝试打开 Nav Canada 网站时出现 CERTIFICATE_VERIFY_FAILED

python - 使用带有 Python Flask 的 AJAX 将 html 插入模板

python - 如何查找Python数据框中单元格中第一次出现匹配的行索引(包含日期)

JavaMail Exchange 身份验证

python - 谷歌在 Pythonanywhere 上登录

python - Pandas - groupby "longest"带薪休假 (PTO) 持续时间

php - 仅当用户使用 Laravel 处于事件状态时登录