python请求登录验证

时间:2015-02-17 02:39:04

标签: python authentication login python-requests

我无法使用python请求登录this网站上的帐户。 登录页面是www.utahrealestate.com/auth/login。 登录凭证发布到www.utahrealestate.com/auth/authenticate。

这是我尝试登录的过程(r是请求会话):

>>> login = r.post('http://www.utahrealestate.com/auth/authenticate', data={'login':'my_login','pass':'my_password'}) 
>>> login.text
u'{"error":"Username or password was invalid.  Please try again or click on \\"Reset it\\" above to reset your password."}'

我知道登录凭据是正确的。我也知道这些字段被命名为login和pass,除了页面生成一些数字组合并将其附加到每个字段名称,但它只在我在浏览器中检查元素时才会这样做。在我的终端中,这些字段只是名为login和pass。

使用requests和BeautifulSoup,这是我的终端中的登录元素:

<input id="login" name="login" tabindex="1" type="text"/>

这是在浏览器中检查元素的时候:

<input id="login" type="text" tabindex="1" name="login_666832525">

密码元素的构造类似,但命名为:&#34; pass&#34;使用与附加到结尾的登录字段相同的数字组合。表格中似乎没有隐藏的字段。 每次在浏览器中刷新页面时,字段名称后面的数字(登录_ ###或传递_ ###)似乎都会更改,但当我使用终端中的请求获取内容时,它不会出现。

我假设我的登录麻烦源于我无法重现字段名称中的数字。所以,我试过改变我的用户代理&#34; request.get标头中的值可以反映浏览器中的值,但似乎没有重现编号的字段名称。它与某种会话cookie相关联吗?也许是我看到的PHPSESSIONID cookie?或者这与字段名称无关?

编辑:

我发现了一个帖子请求,该请求会在登录页面的get请求后自动发送(发布到auth / login.form /)。对此发布请求的响应提供了附加到字段名称的数字。但是,即使将数字串传递给字段名称,我仍然无法继续使用。

form_id = u'418622340'
loginauth_post = r.post('http://www.utahrealestate.com/auth/authenticate/', headers=authpost_header, data={'login_'+form_id: 'my_login', 'pass_'+form_id: 'my_pass'})

2 个答案:

答案 0 :(得分:3)

我能够解决这个问题。显然我需要获取登录页面,然后使用获取登录页面提供的cookie将初始发布请求发送到auth / login.form /。响应时需要将id号附加到字段名称。然后,使用相同的cookie向auth / authenticate发送发布请求。诀窍似乎是在标题中包含'X-NewRelic-ID'和'X-Requested-With'参数。

答案 1 :(得分:0)

尝试写:

data = urllib.urlencode({'login':'my_login','pass':'my_password'})