python身份验证请求登录

2024-10-01 11:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用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,以下是我的终端中的登录元素:

^{pr2}$

在浏览器中检查元素时如下所示:

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

password元素的构造类似,只是它的名称为:“pass”,其数字组合与末尾附加的登录字段相同。表单中似乎没有隐藏字段。 每次在浏览器中刷新页面时,字段名(login#############################。在

我假设我的登录问题源于我无法从字段名中复制数字。所以,我尝试在请求.get头来镜像我浏览器中的一个,但它似乎没有重现编号字段名。它与某种会话cookie相关吗?也许是我看到的那个小甜饼?或者这和字段名无关吗?在

编辑:

我发现了一个post请求,它在登录页面的get请求之后自动发送(posts to auth/登录.form/). 对这个post请求的响应提供了附加在字段名称后面的数字。然而,即使在将数字串传递给字段名之后,我仍然无法继续。在

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'})

Tags: comauthid元素mywww浏览器login
2条回答

我能解决这个问题。显然,我需要获取登录页面,然后向auth发送初始post请求/登录.form/使用通过获取登录页面提供的cookie。它使用需要附加到字段名称后的id号进行响应。然后,使用相同的cookie发送一个post请求进行身份验证。诀窍似乎是在头中包含了'X-NewRelic-ID'和'X-Requested-With'参数。在

试着写:

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

相关问题 更多 >