Python请求登录

时间:2014-07-11 06:23:05

标签: python-3.x beautifulsoup python-requests

我正在创建一个python脚本,它将登录到torrent网站并获取最新的种子。

from bs4 import BeautifulSoup
from requests import session

payload = {
    'action': 'takelogin.php',
    'username': 'username',
    'password': 'password'
}

with session() as c:
    c.post('https://www.bitsoup.me/login.php', data=payload)
    request = c.get('https://www.bitsoup.me/browse.php?cat=19')
    print request.headers
    print request.text

当我尝试上面的脚本时,我得到了

<tr><td align=center class=main style="padding-top: 20px; padding-bottom: 20px">
<h1>Not logged in!</h1>
<p><b>Error:</b> The page you tried to view can only be used when you're logged in.</p>
<form method="post" action="takelogin.php">
<p>Note: You need cookies enabled to log in.</p>
<table border="0" cellpadding=5>
<tr><td class=rowhead>Username:</td><td align=left><input type="text" size=40 name="username" /></td></tr>
<tr><td class=rowhead>Password:</td><td align=left><input type="password" size=40 name="password" /></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Log in!" class=btn></td></tr></table>
<input type="hidden" name="returnto" value="/browse.php?cat=19" />
</form>

我的有效负载设置是否正确?它还说“你需要启用cookie才能登录”,所以我必须在我的脚本中设置cookie功能吗?

1 个答案:

答案 0 :(得分:1)

这是纯粹的推测,因为如果没有帐户,我无法重现您的问题。

我认为问题实际上是您向错误的网址发布了POST。您希望POST到表单的目标,而不是登录页面。原因是您希望模拟登录页面正在执行的操作,POSTtakelogin.php站点。

尝试从有效负载中删除action,然后将post替换为以下内容。

c.post('https://www.bitsoup.me/takelogin.php', data=payload)

我推断这是因为我在POSTtakelogin.php时只得到“密码不正确”的HTML,并且OP的原始POST没有任何有趣的内容。