Для одного асинхронного запроса через 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 только тогда, когда унаследованное окружение процесса — нужная политика маршрутизации.

Похожие статьи