如何在使用 Python 脚本登录时维护登录会话

Posted

技术标签:

【中文标题】如何在使用 Python 脚本登录时维护登录会话【英文标题】:How to maintain login session while logging in using Python Script 【发布时间】:2014-10-13 03:34:28 【问题描述】:

我想使用 python 脚本登录 Ideone.com,然后使用 python 脚本使用后续请求从我自己的帐户中提取内容。 这是我用来登录网站的:

import requests
import urllib
from bs4 import BeautifulSoup

url='http://ideone.com/account/login/'
body = 'username':'USERNAME', 'password':'PASSWORD'

s = requests.Session()
loginPage = s.get(url)
soup = BeautifulSoup(loginPage.text)

r = s.post(soup.form['action'], data = body)
print r

此代码成功让我登录到我的 ideone 帐户。 但是,如果我随后调用(使用 BeautifulSoup)访问我的帐户详细信息,它会再次向我发送登录页面的 html

如何保存特定脚本的会话以便它接受后续调用? 提前致谢,如果之前有人问过这个问题,我们深表歉意。

【问题讨论】:

你需要支持cookies - 检查docs.python.org/2.6/library/cookielib.html的底部(然后是其余部分) 嗨 Leon,非常感谢您的评论。现在,我可以在一次性身份验证后通过 HTTP 调用访问其他页面。虽然使用模块requests 【参考方案1】:

我们可以这样做:

from requests import session
from bs4 import BeautifulSoup

payload = 
    'action'   : 'login',
    'username' : 'USERNAME',
    'password' : 'PASSWORD'

login_url='http://ideone.com/account/login/'

with session() as c:
    c.post(login_url, data = payload)
    request = c.get('http://ideone.com/myrecent')
    print request.headers
    print request.text

【讨论】:

以上是关于如何在使用 Python 脚本登录时维护登录会话的主要内容,如果未能解决你的问题,请参考以下文章

在 grails 中维护会话

无人登录时如何运行维护脚本?

如何在 NodeJS 中维护请求会话

Laravel通过ajax登录维护会话

在 PHP 登录脚本中使用会话和会话变量

Golddata如何采集需要登录/会话的数据?