我想在某些代码中包含异步http请求,但是在合并提供会话ID的登录名时遇到了麻烦。构造Anync代码以便将会话ID传递到所有创建的会话的正确方法是什么?
我有一个登录功能,它将为我提供一个会话ID:
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
我认为我需要将cookie从登录功能的返回传递到异步循环会话。以下正确吗?
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))
在此示例中,我真的很担心要为我的会话提供他们需要工作的信息,因此这是一个不完整的示例。话虽这么说,还有更好的方法吗?