Python 我如何知道登录web会话的要求?

Python 我如何知道登录web会话的要求?,python,session,request,httprequest,Python,Session,Request,Httprequest,以下python脚本通常用于自动填写登录Web表单: import requests payload = { user : myusrname password : mypass ...etc... } s = requests.Session() s.post(formurl, data = payload) r = s.get(protectedurl) 然而,在一些网站上,上述内容似乎无法启动会话。我正在寻找它是什么,它阻止我进入受保护的页面 在网站()上,表

以下python脚本通常用于自动填写登录Web表单:

import requests

payload = {
    user : myusrname
    password : mypass
    ...etc...
}

s = requests.Session()
s.post(formurl, data = payload)
r = s.get(protectedurl)
然而,在一些网站上,上述内容似乎无法启动会话。我正在寻找它是什么,它阻止我进入受保护的页面

在网站()上,表单如下所示

<form autocomplete="off" class="loginForm clearFix"  method="POST"action="/ab/noop">
    <input placeholder="Användarnamn" type="text" name="j_username" autocapitalize="none"> 
    <input placeholder="Lösenord" type="password" name="j_password">
    <div class="errorToolTipPlacement">
        <button class="focusBtn loginButton" type="submit" disabled="disabled">Logga in</button>
        <a class="fRight marginTop4px defaultSize plcLink" href="/glomt-uppgift.html">Problem att logga in?</a>
    </div>
</form>

洛加
我正在为post请求提供所有
name:value
字段(在本例中为
j_用户名
j_密码

请求成功,给我一个状态代码200,然后重定向回原始网页-未登录。起始页和受保护页的url和Cookie相同

我注意到结果是一样的,即使我填写了错误的用户名和密码

我是否遗漏了一些要发送的信息

是否使用了我看不到的更复杂的身份验证


它只是阻止了自动登录机器人吗?

一开始看,请求似乎有第三个参数(url)

下面是我(至少)设置的所有请求头参数 Referer、内容类型和“Accept”参数

Host: www.avanza.se
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cache-Control: no-cache
X-Requested-With: XMLHttpRequest
Referer: https://www.avanza.se/start
Content-Length: 70
Cookie: _ga=GA1.2.714386931.1422441452; _gat_rollup=1; _gat=1; optimizelySegments=%7B%22696152504%22%3A%22ff%22%2C%22696851909%22%3A%22direct%22%2C%22702410951%22%3A%22false%22%7D; optimizelyEndUserId=oeu1422441452807r0.117113927933018; optimizelyBuckets=%7B%7D; optimizelyPendingLogEvents=%5B%5D
Connection: keep-alive
Pragma: no-cache
您可以在命名数组中设置它们,并将它们与post方法的“headers”参数一起传递


post方法“返回”后,您应该实际阅读响应(json格式),它应该为您提供重定向到的url。

我认为这将解决[1]:您好,谢谢您的回答。什么告诉你它有第三个参数?响应中的文本是重定向到主页的javascript片段。响应的标题似乎不包含任何url。我试图将标题添加到post请求中,但没有luckWhat告诉我,还有第三个参数只是访问站点并在调试模式下观察我使用firefox的登录尝试。降低XSS风险的常见技巧是检查referer和/或用户代理字符串。JSON请求的响应可能会设置cookie和/或javascript指令,以便在成功登录时重定向主页面,但我在输入无效凭据后立即收到错误代码/消息。在输入错误的用户名/密码并在firebug中观察后,我成功捕获了正确的url。失败的post请求的url类似于“/post/loginhandler”。我只是尝试(因为我尝试了其他一切)在我的脚本中使用它,而不是表单URL,现在它似乎可以工作了。谢谢你的帮助!