Как я могу использовать готовить с AIOHTTP ClientSession? - PullRequest
0 голосов
/ 22 апреля 2019

Я хотел бы включить асинхронные http-запросы в некоторый код, но у меня возникли проблемы при включении имени входа, предоставляющего идентификатор сеанса.Как правильно структурировать код anync, чтобы идентификатор сеанса передавался всем созданным сеансам?

У меня есть функция входа в систему, которая выдаст мне идентификатор сеанса:

async def login(url, username, password):

    sso_url = host + "/sso/SSOSer"

    login_data = {}
    login_data["_ssoUser"] = username
    login_data["_ssoPass"] = password
    login_data["_action"] = "LOGIN"
    login_data["_fromLoginPage"] = "TRUE"
    login_data["_ssoOrigUrl"] = host + "/app/portal/logondone.htm"
    login_data["_serviceName"] = "SSOP"

    async with ClientSession() as session:
        response = await session.post(sso_url, data=login_data)

    return response

Я думаю, что мне нужно передать куки от возврата функции входа в систему в асинхронных циклах.Правильно ли следующее:


async def _main(url):
    s = await login(url=url, username='abc', password='123')
    cookies = s.cookies
    async with ClientSession(cookies=cookies) as session:
        etc. 
        etc.




url= 'http://someurl.net'
loop = asyncio.get_event_loop()
loop.run_until_complete(_main(url=url))

В этом примере я действительно беспокоюсь о том, чтобы дать своим сессиям информацию, необходимую для работы, поэтому это неполный пример.При этом, есть ли лучший способ сделать это?

...