Python通过重定向请求登录

时间:2016-06-24 20:16:13

标签: python login python-requests

这是一个网站http://pro.wialon.com/,我想用python请求模块登录。登录和通过是演示。

import requests
with requests.Session()as c:
    url = 'http://pro.wialon.com/'
    payload = dict(user='demo',
                       passw='demo',
                       login_action='login')
    r = c.post(url, data=payload, allow_redirects=True)
    print(r.text)

坦率地说,我希望将报告(在报告标签中)作为回复。但我无法弄清楚如何登录。

2 个答案:

答案 0 :(得分:1)

帖子网址不正确且您缺少表单数据,您还需要执行初始请求,发布到正确的网址,然后获取container.add()

http://pro.wialon.com/service.html

您可以在网络标签下的Chrome开发工具中查看帖子:

enter image description here

此外,发布或获取请求的默认设置是允许重定向,因此您无需在此处指定。

您可以在登录页面来源中看到表单操作:

data = {"user": "demo",
    "passw": "demo",
    "submit": "Enter",
    "lang": "en",
    "action": "login"}

 head = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

with requests.Session() as c:
    c.get('http://pro.wialon.com/')
    url = 'http://pro.wialon.com/login_action.html'
    c.post(url, data=data, headers=head)
    print(c.get("http://pro.wialon.com/service.html").content)

使用 bs4

,而不是硬编码我们可以从表单中解析它的路径
<form class="login_bg_form" id="login_form" action="login_action.html" method="POST">

现在唯一的问题是数据主要是使用ajax请求填充的,所以如果你想要抓取数据,你需要模仿请求。

答案 1 :(得分:0)

我也面临着同样的事情。我们的产品实际上将登录身份验证请求重定向到第三方应用程序,并且如果登录凭据有效,则第三方应用程序将再次使用必需的Cookie重定向到我们的应用程序。

我得到的一个解决方案是,在无头浏览器中使用硒输入登录凭据。然后单击使用硒登录。然后将发生重定向和身份验证,然后您的浏览器将收到所需的cookie。现在,只需使用driver.getcookies()获取cookie并将其存储在变量中。 然后在标题中设置此Cookie,并将此标题用于将来的REST API调用。

完成!