使用请求登录网站

时间:2014-01-24 23:44:45

标签: python httprequest

我有这种形式,但我不知道如何创建能够正确执行此操作的有效负载。

<form method="post" action="/login" name="loginform" id="loginForm">
    <fieldset id="fs">
        <label for="username">Username:
        <input type="text" id="username" name="username" />
        </label>

        <label for="password">Password:
        <input type="password" id="password" name="password" />
        </label>

        <input type="hidden" name="act" value="login" />
        <input name="submit" type="submit" id="submit" value="Login" />
    </fieldset>
</form>

我尝试过payload = {"username":"blah","password":"blah"}; r=requests.post(url, data=payload),但我没有得到我期待的回应;即,r.text没有预期的&#34;登录失败&#34;在它的线。 但是当我填写表单并尝试通过浏览器首次登录时,它表明这是我第二次登录失败。

我特别关注的网站是www.thepiratebay.se,我正在努力的是能够以编程方式上传一个种子文件。

--- --- EDIT
我正在使用的新代码是

import requests
user = "username"
pswd = "password"
url = "http://www.thepiratebay.se/login"
payload = {
    "act":"login",
    "username":user,
    "password":pswd,
    "submit":"Login"
}
r = requests.post(url, data=payload, allow_redirects=True)
print r.text

还是不行! r.text只是默认登录页面。还有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用firebug net tab来追踪实际发送的参数,这是我试用时得到的:

act          login
password     password
submit       Login
username     username

Source
username=username&password=password&act=login&submit=Login

答案 1 :(得分:0)

我最后选择了一个不同的模块,斜纹,做我想做的事。我认为twill实际上是一个“完整”的网络浏览器。无论如何,这就是代码转变为:

from twill import commands
commands.go("http://www.thepiratebay.se/login")
commands.form("loginform", "username", "blah")
commands.form("loginform", "password", "blah")
commands.submit()