#python #aiohttp
Вопрос:
Я испытываю что-то странное, создавая библиотеку, которая взаимодействует со сторонним API rest. Я довольно новичок в python и aiohttp, но никакое количество гуглов не дало мне никаких результатов.
Я заметил, что работает только первый запрос с клиентской сессией. Последующие вызовы завершаются неудачно.
session = ClientSession()
things = await Thing.all(session, username="me@mail.com", password="123") # works
things = await Thing.all(session, username="me@mail.com", password="123") # 500 error from server
things = await Thing.all(session, username="me@mail.com", password="123") # 500 error from server
Однако использование нового сеанса каждый раз работает:
things = await Thing.all(ClientSession(), username="me@mail.com", password="123")
things = await Thing.all(ClientSession(), username="me@mail.com", password="123")
things = await Thing.all(ClientSession(), username="me@mail.com", password="123")
Я не собираюсь закрывать свои сеансы.
Нет ничего особенно странного в том, как я звоню из своего класса вещей:
resp = await session.post(
url,
data=f"Authorization=Bearer {token}" data,
headers={"accept": "application/json", "content-type": "application/x-www-form-urlencoded"}
)
resp.raise_for_status()
return await resp.json()
Это вполне может быть ошибкой сервера API, честно говоря, это не очень хороший API, но есть ли у кого-нибудь какие-либо представления о том, что может передаваться от одного запроса к другому, поэтому сеансы нельзя использовать повторно?
Ответ №1:
Я сам понял это после хорошего ночного сна и немного туда-сюда. По умолчанию aiohttp обрабатывает файлы cookie, полученные по одному запросу, и отправляет их обратно по последующим запросам. По какой-то неизвестной причине API, который я использую, эффектно взрывается, когда я отправляю им файлы cookie.
aiohttp позволяет настроить noop cookie_jar
, который игнорирует файлы cookie:
from aiohttp import ClientSession, DummyCookieJar
session = ClientSession(cookie_jar=DummyCookieJar())
Таким образом, можно повысить производительность за счет наличия общего пула подключений, но файлы cookie игнорируются.