使用Python登录https网站并提出请求

时间:2016-12-12 08:00:20

标签: html python-3.x

我想访问https://bato.to/中要求我先登录的一些内容。他们的登录页面是:https://bato.to/forums/index.php?app=core&module=global&section=login

我已经打开了chrome的Web开发人员工具来检查我点击登录时发送的POST。 POST中的“表单数据”是:

auth_key:880ea6a14ea49e853634fbdc5015a024
referer:https://bato.to/forums/
ips_username:startwinkling
ips_password:password1
rememberMe:1

所以我尝试用代码实现这个:

到目前为止

代码

from requests import session
import re

AUTH_KEY = re.compile(r"<input type='hidden' name='auth_key' value='(.*?)' \/>")

payload = {
    'ips_username': 'startwinkling',
    'ips_password': 'password1',
    'rememberMe' : '1',
    'referer' : 'https://bato.to/forums/'
}

with session() as c:
    login_url = 'https://bato.to/forums/index.php?app=core&module=global&section=login'
    page = c.get(login_url)
    auth_key = AUTH_KEY.search(page.text).group(1)
    payload['auth_key'] = auth_key
    print("auth_key: %s" % auth_key)

    page = c.post(login_url, data=payload)
    page = c.get('https://bato.to/reader#4b57865eb3a9a9a6')
    print(page.text)

我相信自从代码输出后,我正在抓取并正确传递auth_key:

auth_key: 880ea6a14ea49e853634fbdc5015a024

但是打印出的HTML表明我无法成功登录。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您用于POST的网址不正确。

正确的应该是https://bato.to/forums/index.php?app=core&module=global&section=login&do=process,它与登录着陆页不同,注意额外的do=process部分

<强>代码:

from requests import session
import re

AUTH_KEY = re.compile(r"<input type='hidden' name='auth_key' value='(.*?)' \/>")

payload = {
    'ips_username': 'startwinkling',
    'ips_password': 'password1',
    'rememberMe' : '1',
    'referer' : 'https://bato.to/forums/'
}

with session() as c:
    login_url = 'https://bato.to/forums/index.php?app=core&module=global&section=login'
    page = c.get(login_url)
    auth_key = AUTH_KEY.search(page.text).group(1)
    payload['auth_key'] = auth_key
    print("auth_key: %s" % auth_key)

    page = c.post(login_url + '&do=process', data=payload)
    page = c.get('https://bato.to/reader#4b57865eb3a9a9a6')
    print(page.text)

PS 我建议您添加一些标题(不使用默认标题),您可能不希望在其分析中显示为User-Agent: python-requests/1.2.3 CPython/2.7.3 Windows/7 ,如果他们在某些页面上为“非浏览器”访问设置了一些限制。