Один запрос aiohttp через HTTP-прокси
Отправьте запрос aiohttp через HTTP-прокси без аутентификации, проверьте статус и завершите его в явном асинхронном жизненном цикле.
Для одного асинхронного запроса через HTTP-прокси без аутентификации задайте маршрут на session.get(). При необходимости добавьте aiohttp в проект:
uv add aiohttpЗамените документационный адрес ниже своим HTTP-слушателем или кандидатом из списка HTTP-прокси. Он должен разрешать CONNECT к HTTPS-цели; узлу только с SOCKS нужен подходящий коннектор вместо этого аргумента proxy.
import asyncio
import aiohttp
async def main():
timeout = aiohttp.ClientTimeout(total=15, connect=5)
async with aiohttp.ClientSession(
timeout=timeout,
trust_env=False,
) as session:
async with session.get(
"https://example.com/",
proxy="http://203.0.113.10:8080",
) as response:
print(response.status)
print((await response.text())[:200])
asyncio.run(main())
Запрос выводит статус HTTP и первые 200 символов текста ответа. Ответ 403 или 429 здесь остаётся доступным для проверки; вызовите response.raise_for_status(), если приложение должно превращать неуспешные статусы в исключения. Асинхронные менеджеры контекста закрывают сессию и ответ после завершения блоков, в том числе при исключении.
15-секундный бюджет total охватывает операцию запроса. 5-секундный бюджет connect включает ожидание доступного соединения из пула, поэтому занятый пул может исчерпать его до открытия нового сокета. Это важно при превращении одиночного вызова в конкурентные проверки.
trust_env=False сохраняет показанный маршрут явным. aiohttp по умолчанию не обнаруживает переменные окружения прокси; экспорт такой переменной в другом терминале не настроит этот вызов. Выбирайте trust_env=True только тогда, когда унаследованное окружение процесса — нужная политика маршрутизации.