Python请求 - POST混淆

时间:2015-12-12 05:56:41

标签: python post python-requests

我一直在把头撞到墙上......任何人都可以帮助我将我的大脑包裹起来以获得工作要求吗?

我试图在网站上工作,但首先我必须通过登录...我一直在谷歌搜索,但到目前为止,我无法解决它。我非常喜欢网络资源,但在Maya中有一些python经验。

这是我到目前为止所拥有的

import requests
login_url = 'https://example.com/examplelogin
login_payload = {'j_username':'myusername', 'j_password':'mypassword'}
with requests.Session() as s:
    r = s.post(login_url, data = login_payload)

以下是我试图填写的表单:

<form id="login" action="/idp/Authn/UserPassword" method="post">
<p class="customError"></p>
<section>
<input id="username" class="form-element form-field" name="j_username" type="text" value="" placeholder="email address"></section>
<section>
<input id="password" class="form-element form-field" name="j_password" type="password" value="" placeholder="password"></section>
<button class="form-element form-button" type="submit">Login</button>
</form>

r.status_code我得到200,但r.text只是登录页面HTML ...它没有登录我并带我通过...

我错过了什么?

3 个答案:

答案 0 :(得分:1)

如果站点没有某种API,则可能无法使用请求lib来访问它。您应该查看Selenium它将允许您使用FireFox访问该页面。如果你想要一个通常更快的无头版本,你可以使用phantomjs

from selenium.webdriver.firefox.webdriver import WebDriver


driver = WebDriver()
driver.get('https://example.com/examplelogin')

username = driver.find_element_by_id('username')
password = driver.find_element_by_id('password')

username.send_keys('MY_USERNAME')
password.send_keys('MY_PASSWORD')

submit.click()

答案 1 :(得分:1)

请求是一个HTTP库。您必须阅读HTTP,了解使用前的内容。

  

HTTP在客户端 - 服务器计算模型中用作请求 - 响应协议。例如,web浏览器可以是客户端,并且在托管网站的计算机上运行的应用程序可以是服务器。客户端向服务器提交HTTP请求消息。服务器提供诸如HTML文件和其他内容之类的资源,或代表客户端执行其他功能,向客户端返回响应消息。响应包含有关请求的完成状态信息,还可能在其消息正文中包含请求的内容。

实际上,您的表单应该与POST请求相同。您还必须阅读forms

我认为完成一个教程以了解它是如何工作的将是一个好主意。 There is a good place to start.

答案 2 :(得分:0)

您希望将请求发送到 / idp / Authn / UserPassword ,而不是 / examplelogin 。如果form具有action属性,浏览器将POST发送到该属性中的指定地址。

但是,如果您想使用网站,最好使用Selenium作为@ emett-speer建议,因为您可能不想手动与网站通话(如果网址会被更改,该怎么办?等)。