aiohttp-аутентификация на основе форм

Я не могу найти рабочий код aiohttp в сочетании со страницей входа в систему. Цель проста: аутентификация на основе формы с именем пользователя и паролем, который cookie я хотел бы использовать в последующих вызовах aiohttp async fetch.

кажется, что вся концепция сеанса изменилась в aiohttp между версиями, поэтому мне любопытно, как я могу реализовать ее в самой последней версии. Я не уверен, как получить cookie один раз, а затем использовать его в асинхронном вопрос.

Я бы очень хотел увидеть полностью рабочий пример, так как, к сожалению, я не смог заставить его работать с фрагментами, которые я нашел везде.

Я думаю, что это может быть началом, но я не уверен, и я, конечно, не вижу, как я могу подключить все к нему (мне также нужно aiohttp.TCPConnector?) http://aiohttp.readthedocs.org/en/latest/client_reference.html#aiohttp.client.ClientSession

пример моего не-асинхронного версия в Python 2 с использованием mechanize (хотя я, естественно, использую Python 3 для asyncio и т. д.):

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')

1 ответов


Я просто пример добавила для basic авторизации на стороне клиента: client_auth.py

вам этого достаточно?

P. S. На Самом Деле ClientSession является заменой для старого стиля request+connector концепции. Сеанс-более естественный способ сохранить информацию, связанную с сеансом. Но старый способ все еще работает.