Pour une seule requête asynchrone via un proxy HTTP sans authentification, gardez le trajet sur session.get(). Ajoutez aiohttp au projet si nécessaire :

uv add aiohttp

Remplacez l’adresse de documentation ci-dessous par votre point d’écoute HTTP ou un candidat de la liste de proxys HTTP. Il doit autoriser CONNECT vers la destination HTTPS ; un point limité à SOCKS nécessite un connecteur adapté plutôt que cet argument 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())

La requête affiche son statut HTTP et les 200 premiers caractères du texte de réponse. Un 403 ou 429 reste ici une réponse inspectable ; appelez response.raise_for_status() si l’application doit transformer les statuts d’échec en exceptions. Les gestionnaires de contexte asynchrones ferment la session et la réponse à la fin de leurs blocs, y compris en cas d’exception.

Le budget total de 15 secondes couvre l’opération de requête. Le budget connect de 5 secondes inclut l’attente d’une connexion disponible dans le pool : un pool occupé peut donc l’épuiser avant l’ouverture d’un nouveau socket. Cette distinction compte lorsque l’appel unique est adapté à des vérifications concurrentes.

trust_env=False maintient le trajet présenté explicite. aiohttp ne découvre pas par défaut les variables d’environnement proxy ; en exporter une dans un autre terminal ne configure pas cet appel. Choisissez trust_env=True uniquement lorsque l’environnement hérité du processus est la politique de routage souhaitée.

Articles similaires