python - 基于 aiohttp 表单的身份验证

标签 python authentication python-asyncio aiohttp

我找不到与登录页面结合使用的 aiohttp 的工作代码。目标很简单:使用用户名和密码进行基于表单的身份验证,我想在后续的 aiohttp 异步获取调用中使用哪个 cookie。

似乎整个 Session 概念在 aiohttp 中的版本之间发生了变化,所以我很好奇如何在最新版本中实现它。我不确定如何获取一次 cookie,然后在异步事务中使用它。

我真的很想看到一个完整工作的例子,因为不幸的是我无法使用我在各处找到的代码片段来让它工作。

我想这可能是个开始,但我不确定,我当然不知道如何将所有东西连接到它(我还需要一个 aiohttp.TCPConnector 吗?) http://aiohttp.readthedocs.org/en/latest/client_reference.html#aiohttp.client.ClientSession

我在 Python 2 中使用 mechanize 的非异步版本的示例(尽管我自然使用 Python 3 进行异步等):

import mechanize
import urllib

class MyClass()
    def __init__(self):
        self.data = {'username' : 'me', 'password' : 'pw'}
        self.login_url = 'http://example.com/login'
        self.login()

    def call(self, url):
        request2 = mechanize.Request(url)
        self.cookie_jar.add_cookie_header(request2)
        response2 = mechanize.urlopen(request2).read()
        return response2    

    def login(self):
        request = mechanize.Request(self.login_url)
        # 'username' and 'password' keys are actually the name of the <input>
        logInfo = urllib.urlencode({'username' : self.data['username'], 
                                    'password' : self.data['password']})
        response = mechanize.urlopen(request, data = logInfo)
        cookie_jar = mechanize.CookieJar()
        cookie_jar.extract_cookies(response, request)
        self.cookie_jar = cookie_jar

mc = MyClass()
mc.call('http://example.com/other_url')

最佳答案

我刚刚在客户端添加了基本身份验证示例:client_auth.py

你够了吗?

附言实际上 ClientSession 是旧式 request+connector 概念的替代品。 session 是保存 session 相关信息的更自然的方式。但旧方法仍然有效。

关于python - 基于 aiohttp 表单的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712777/

相关文章:

python - Python Web 框架中的 HTTP 请求之间如何保留资源?

python - MessageDialog 在 FileDialog ShowModal 后无响应

python - 开始学习新的 Python 3.5 Asyncio(协程)的好地方 | Discord.py BOT 崩溃

python - 使用 asyncio 进行多次调用并将结果添加到字典中

python - 需要 while True :

python - PIL - 在图像上绘制多行文本

php - 在第三方调用的 WebHook 中验证用户

javascript - 如果 Keycloak 身份验证是在 Apache 级别而不是前端应用程序上完成的,是否有办法获取用户数据

javascript - Facebook Javascript API : tracking user adding application for first time

websocket - Quart(异步 Flask)应用程序中的 Autobahn websocket 客户端