Python请求具有登录凭据

时间:2017-12-15 16:36:50

标签: python python-requests

我正在尝试登录网址&下载内容然后解析,URL需要用户名&登录密码。

使用下面给出了以下错误:

SELECT 
COALESCE( (SELECT row1 FROM table WHERE id=my_id), NULL),
COALESCE( (SELECT row2 FROM table WHERE id=my_id), NULL),
COALESCE( (SELECT row3 FROM table WHERE id=my_id), NULL)

以上代码的错误日志输出:

尝试使用以下值,但没有任何成功

values = {'登录':'测试',           '密码':'测试',           '登录':'提交'}

import requests
url = 'https://test/acx/databaseUsage.jssp?object=all'
values = {'username': 'test_user',
          'password': 'test_pswd'}
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

r = requests.post(url, data=values, headers=headers)
print r.content

登录页面的图片

Detecting changes in a Javascript array using the Proxy object

1 个答案:

答案 0 :(得分:2)

要成功登录,您必须将正确的数据提交到正确的网址。您可以从HTML表单中获取这些值,也可以通过检查浏览器中的网络流量来获取这些值。此外,您可能希望收集任何经过身份验证的Cookie。

  • 确保使用正确的网址。您可以从表单的action属性中获取该URL(如果表单没有操作,则将其提交给托管它的URL)。如果您检查表单,您将看到它被提交到:“/ nl / jsp / logon.jsp”。

  • 确保包含所有必需的数据。如果表单包含隐藏的输入,则它们应包含在POST数据中。提交所有表单字段非常重要,因为它们可能包含基本数据。

  • 您可以使用Session()对象存储Cookie。这将跨请求收集和使用cookie(和其他参数),因此您可以作为经过身份验证的用户访问该站点。

  • 如果您想设置或更改标题,可以使用headers参数或Session.headers属性 - 这些标题将用于所有请求。通常更改默认的User-Agent就足够了,但有些网站可能会有更多的标题(例如有效的Referer)。

import requests

url = 'https://example.com/nl/jsp/logon.jsp'
post_data = {
    'login': 'username', 
    'password': 'password', 
    'target':'/acx/databaseUsage.jssp?object=all', 
    'action':'submit'
}
with requests.Session() as s:
    s.headers['User-Agent'] = 'My user-agent'
    r = s.post(url, data=post_data)
    print(r.text)

如果您仍然无法登录,则可能需要使用Selenium。有时JavaScript会参与登录过程,requests不会运行JavaScript代码。可以对此过程进行反向工程,但使用Selenium会更容易/更好。