aiohttp.ClientSession で Cookie を使用しようとしていますが、複数の要求で Cookie を処理していないようです。それまたは私はそれを正しく使用していません。
クライアントにクッキーを保存する単純なサーバーがあります。これは、ブラウザからアクセスすると正常に機能します。
サーバーコード: (ここから変更)
import asyncio
import time
from aiohttp import web
from aiohttp_session import get_session, setup
from aiohttp_session.cookie_storage import EncryptedCookieStorage
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
async def handler(request):
session = await get_session(request)
last_visit = session.get('last_visit', 'Never')
if last_visit == 'Never':
message = "Welcome, I don't think you've visited here before."
else:
message = 'Welcome back, last visited: {} secs ago'.format(time.time() -
last_visit)
session['last_visit'] = time.time()
return web.Response(body=message.encode('utf-8'))
async def init(loop):
app = web.Application()
setup(app,
EncryptedCookieStorage(b'Thirty two length bytes key.'))
app.router.add_route('GET', '/', handler)
srv = await loop.create_server(
app.make_handler(), '0.0.0.0', 8080)
return srv
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
ブラウザからアクセスすると、次のようになります。
Welcome back, last visited: 1176.336282491684 secs ago
現在、Python クライアント内でこの動作を模倣しようとしていますが、現在は機能していません。Cookie をファイルに永続化していないことは承知していますが、同じセッション内で複数のリクエストを試行しているので、これは正しく機能するはずですか?
クライアント セッション内の Cookie は、複数のリクエスト間で保持されていないようです。
クライアントコード:
import aiohttp
import asyncio
jar = aiohttp.CookieJar(unsafe=True)
async def blah():
async with aiohttp.ClientSession(cookie_jar=jar) as session:
for i in range(2):
async with session.get('http://localhost:8080') as resp:
print(resp.status)
print(await resp.text())
print(session.cookies)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(blah())
クライアント コードを実行すると、次のようになります。
> python client.py
200
Welcome, I don't think you've visited here before.
Set-Cookie: AIOHTTP_SESSION="gAAAAABXpF_SYEhcMpT-1Q_g6V-SwDuWh-XZipIMre5GgYvJ513ao4BaVgN4kcQM4b91umGCgWuoCEe5RCpZ5ryA30rchUAaojH3B35OL9LjH-kLJ3Md0PhfaylWl3_ct5K2aSwdBdMU_mACaHeTV0FA7yiT0DrMI_n9ct3D-jRTYCsKc5xLI2I="; Domain=localhost; HttpOnly; Path=/
200
Welcome, I don't think you've visited here before.
Set-Cookie: AIOHTTP_SESSION="gAAAAABXpF_SiCl07HDerId98tjI6hTrWOcEmCRVELV3F_sif3XkzgjS_hfwlkMK4HpoWbRrNoxJZpERPKkxRJi9AOpUeleWTkfkjXUcNk13OX5GCOZDSLbSbTkqdoiiAYfAsQ3CNHZWGWd2xzlha_E54ig3Jq1sQsAXV6rgcrqxh0xMGYWfseM="; Domain=localhost; HttpOnly; Path=/