无法使用Python

时间:2016-06-21 01:17:15

标签: python authentication python-requests basic-authentication

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

网站 - 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。我知道如何创建持久性会话,但如果您能帮我登录网站,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,当需要身份验证并且必须为进一步的请求维护会话时,requests.session对象是预期的方式。

这涉及创建会话对象并使用它来发送POST请求。

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

您将遇到的另一个问题是您没有发送与浏览器相同的有效负载(或者更重要的是,正如服务器所期望的那样)以及内部服务器的内容错误表明。

如果您正在使用Firefox,则可以使用Ctrl-Shift-Q打开网络监视器窗口,选择浏览器发送登录详细信息的POST请求,然后转到“#params&#39;选项卡,您将看到如下内容:

enter image description here

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