1

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=/
4

0 に答える 0