Dla jednego asynchronicznego żądania przez proxy HTTP bez uwierzytelniania pozostaw trasę przy session.get(). W razie potrzeby dodaj aiohttp do projektu:

uv add aiohttp

Zastąp poniższy adres dokumentacyjny własnym punktem nasłuchowym HTTP lub kandydatem z listy proxy HTTP. Musi zezwalać na CONNECT do celu HTTPS; punkt obsługujący tylko SOCKS potrzebuje odpowiedniego konektora zamiast tego argumentu 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())

Żądanie wypisuje status HTTP i pierwsze 200 znaków tekstu odpowiedzi. 403 lub 429 nadal jest tutaj odpowiedzią, którą można sprawdzić; wywołaj response.raise_for_status(), jeśli aplikacja ma zamieniać nieudane statusy w wyjątki. Asynchroniczne menedżery kontekstu zamykają sesję i odpowiedź po zakończeniu bloków, także przy wyjątku.

15-sekundowy budżet total obejmuje operację żądania. 5-sekundowy budżet connect obejmuje czekanie na dostępne połączenie z puli, więc zajęta pula może zużyć go przed otwarciem nowego gniazda. To ważne przy przekształcaniu pojedynczego wywołania we współbieżne kontrole.

trust_env=False utrzymuje pokazaną trasę jawną. aiohttp domyślnie nie wykrywa zmiennych środowiskowych proxy; eksport zmiennej w innym terminalu nie skonfiguruje tego wywołania. Wybieraj trust_env=True tylko wtedy, gdy odziedziczone środowisko procesu jest zamierzoną polityką routingu.

Powiązane artykuły