Comment définir un proxy dans AIOHTTP

Apprenez à configurer un proxy dans AIOHTTP avec ce guide étape par étape.
14 min de lecture
How to Set Proxy in AIOHTTP

À la fin de ce guide d’intégration du proxy AIOHTTP, vous aurez appris ce qui suit :

  • En quoi consiste AIOHTTP.
  • Pourquoi utiliser un proxy.
  • Comment configurer un proxy HTTP, HTTPS ou SOCKS dans AIOHTTP.
  • Comment gérer l’authentification par proxy, les erreurs de certificat SSL, la rotation des adresses IP, etc.

En quoi consiste AIOHTTP ?

AIOHTTP est un framework populaire client/serveur HTTP asynchrone en open source codé en Python. Ses principales caractéristiques sont les suivantes :

  • Prise en charge du protocole HTTP côté client et côté serveur.
  • Prise en charge des sockets Web clients et serveurs.
  • Fourniture d’un serveur Web doté d’un intergiciel et d’un routage enfichable.

Ce qui importe dans ce didacticiel, c’est sa capacité à agir en tant que client HTTP pour effectuer des requêtes HTTP en plus d’asyncio. AIOHTTP est particulièrement adapté à la création de scripts qui doivent gérer efficacement plusieurs requêtes simultanées.

Au moment d’écrire ces lignes, AIOHTTP compte plus de 14 000 étoiles sur GitHub.

Pourquoi avez-vous besoin d’un proxy AIOHTTP ?

Une bonne raison d’utiliser un proxy dans AIOHTTP est la protection de votre identité en ligne. En acheminant votre demande vers un serveur proxy, vous pouvez masquer votre adresse IP et votre localisation, afin de faire croire au site de destination que votre demande provient du serveur proxy et non de vous. Cela signifie qu’il sera plus difficile de vous identifier et de vous suivre, ce qui renforcera la confidentialité de vos opérations en ligne tout en évitant les interdictions d’adresses IP et les restrictions géographiques.

Notez que vous pouvez obtenir le même résultat avec des requêtes, comme indiqué dans notre tutoriel d’intégration de proxys de requêtes.

Configuration d’un proxy dans le Proxy AIOHTTP

Dans cette section étape par étape, vous allez apprendre à configurer un proxy HTTP, HTTPS ou SOCKS dans AIOHTTP.

Prérequis pour AIOHTTP

Dans notre démonstration, nous supposerons que Python est déjà installé sur votre machine et qu’un projet Python avec un environnement virtuel est déjà en place. Installez AIOHTTP et ses dépendances recommandées à l’aide de la commande suivante :

pip install aiohttp[speedups]

Cela ajoutera aiohttp aux dépendances de votre projet.

Ouvrez votre fichier de script Python et ajoutez l’importation d’aiohttp :

import aiohttp

Pour que aiohttp fonctionne avec la syntaxe async/await, vous devez utiliser asyncio. Importez donc également cette bibliothèque et configurez une fonction de base async main() :


import aiohttp
import aiohttp

import asyncio

async def main():
  # aiohttp logic...

asyncio.run(main())

Parfait ! Vous êtes prêt(e) à écrire la logique d’intégration du proxy AIOHTTP !

Prérequis pour le proxy

Avant de voir comment intégrer un proxy dans AIOHTTP, vous devez comprendre à quoi ressemble l’URL d’un proxy.

Il s’agit du format de l’URL requis pour se connecter à un serveur proxy en AIOHTTP :

<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]

En détail, cela se compose ainsi :

  • <PROTOCOL>: http pour les proxys HTTP, https pour les proxys HTTPS, et socks, socks4, or socks5 pour les proxys dans les différents protocoles SOCKS.
  • <HOST> : adresse IP du serveur proxy ou de l’ensemble de son domaine (par exemple proxydomain.com).
  • <PORT>: : port écouté par le serveur proxy.
  •  : nom d’utilisateur facultatif pour authentifier la connexion proxy.
  •  : mot de passe facultatif pour authentifier la connexion proxy.

Notez que <PROTOCOL> et <HOST> sont les seules parties obligatoires de l’URL. La section <PORT> est facultative, mais vous devez généralement la spécifier. Enfin, la section des informations d’identification <USERNAME>:<PASSWORD> n’est nécessaire que lorsqu’il s’agit de proxys authentifiés.

Si vous n’avez pas l’URL d’un serveur proxy, vous pouvez en obtenir un en ligne gratuitement. Dans le même temps, gardez à l’esprit que les proxys gratuits ne sont pas fiables, gourmands en données, incohérents, sujets aux erreurs et douteux. Vous ne pouvez les utiliser qu’à des fins d’apprentissage. Dans un environnement de production, vous aurez besoin d’un proxy premium fiable provenant d’un fournisseur de premier ordre tel que Bright Data.

Plus loin dans cet article, vous découvrirez comment obtenir un proxy Bright Data et l’utiliser dans AIOHTTP.

Intégration d’un proxy HTTP

Comme indiqué dans la documentation, AIOHTTP prend en charge l’intégration de proxys HTTP. Supposons qu’il s’agit de l’URL de votre proxy HTTP :

http://190.6.23.219:999

Vous pouvez le spécifier dans votre requête AIOHTTP en utilisant l’option de proxy ci-dessous :


async with aiohttp.ClientSession() as session:
    async with session.get(
        'https://example.com',
        proxy='http://190.6.23.219:999'
    ) as response:
        print(response.status)

AIOHTTP va désormais acheminer la requête GET via l’URL du proxy transmise en tant qu’argument proxy à la fonction get().

N’oubliez pas que vous pouvez utiliser un proxy HTTP pour le trafic HTTP et HTTPS.

Intégration d’un proxy HTTPS

En ce qui concerne les proxys HTTPS, les choses deviennent un peu plus complexes. Comme indiqué dans la documentation AIOHTTP :

« Dans Python 3.10, la prise en charge de TLS dans TLS est désactivée pour les transports qu’asyncio utilise. Si la nouvelle version de Python (disons la v3.11) active un attribut, cela fonctionnera simplement.

aiohttp v3.8 et ses versions ultérieures sont prêts pour cela et ont un code en place qui prend en charge TLS-in-TLS, ce qui permet d’envoyer des requêtes HTTPS via des tunnels proxy HTTPS. »

En d’autres termes, si vous souhaitez utiliser des proxys HTTPS dans AIOHTTP, vous devez mettre à jour Python vers la version 3.11 et aiohttp vers la version 3.8 ou supérieure. L’approche de l’intégration du proxy HTTPS AIOHTTP reste la même que celle décrite ci-dessus. Le seul aspect qui change est que le protocole proxy sera https et non plus http.

Intégration d’un proxy SOCKS

AIOHTTP ne prend pas en charge les proxys SOCKS prêts à l’emploi. Si vous devez utiliser un proxy SOCKS dans AIOHTTP, vous devez installer aiohtpp-socks :

pip install aiohttp_socks

Cette bibliothèque utilise python-socks pour étendre AIOHTTP avec la prise en charge de SOCKS4(a) et SOCKS5(h).

Considérez ceci comme l’URL de votre proxy SOCKS :

socks5://98.175.31.195:4145

Utilisez-la dans AIOHTTP comme suit :


# initialize a SOCKS proxy connector
connector = ProxyConnector.from_url('socks5://98.175.31.195:4145')

# initialize an AIOHTTP client with the SOCKS proxy connector
async with aiohttp.ClientSession(connector=connector) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

AIOHTTP acheminera désormais la requête GET via le proxy SOCKS spécifié.

ProxyConnector provient de aiohttp-socks, alors n’oubliez pas de procéder à l’importation avec :

from aiohttp_socks import ProxyConnector

Dans les coulisses, aiohttp-socks définit un connecteur AIOHTTP pour modifier les requêtes et les faire passer par le proxy SOCKS donné.

Exemple complet

Vous venez d’apprendre à utiliser un proxy avec AIOHTTP. Vérifions que les approches ci-dessus fonctionnent dans un exemple complet !

Par souci de simplicité, nous allons travailler avec un proxy HTTP, mais vous pouvez facilement adapter l’exemple ci-dessous à HTTPS et SOCKS.

L’URL cible de la requête GET sera l’endpoint /ip du projet HTTPBin. Cette API renvoie l’adresse IP de la requête entrante. Ainsi, si l’intégration du proxy est réussie, l’endpoint doit répondre avec l’adresse IP du serveur proxy et non la vôtre.

Encore une fois, supposons qu’il s’agit de l’URL de votre serveur proxy HTTP :

http://190.6.23.219:999

Intégrez-la à AIOHTTP et imprimez les données renvoyées par l’endpoint https://httpbin.io/ip avec :


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://httpbin.io/ip',
          proxy='http://190.6.23.219:999'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

Exécutez ce script et vous devriez obtenir :


{
  'origin': '190.6.23.219'
}

Et voilà ! Il s’agit exactement de l’adresse IP du serveur proxy, ce qui signifie que l’intégration du proxy AIOHTTP fonctionne à merveille.

Remarque : la durée de vie des serveurs proxy est courte. Au moment où vous lirez ce tutorial, le proxy sélectionné ne fonctionnera plus et le script ci-dessus échouera. Pour le faire fonctionner, remplacez le proxy HTTP par un proxy neuf et fonctionnel.

Proxy AIOHTPP : cas d’utilisation avancés

Vous connaissez les bases de l’intégration d’un proxy AIOTTP, mais qu’en est-il des techniques plus complexes ? Vous en apprendrez plus dans cette section !

Proxys globaux via des variables d’environnement

AIOHTTP permet de déterminer le proxy à utiliser de deux manières :

  1. Il utilise l’URL du proxy transmise à l’argument proxy.
  2. Si trust_env est défini sur True, il lit les variables d’environnement HTTP_PROXY et HTTPS_PROXY.

Vous pouvez donc configurer un proxy globalement dans AIOHTTP en définissant les paramètres ci-dessous :

  • HTTP_PROXY : URL du serveur proxy à utiliser pour les requêtes HTTP.
  • HTTPS_PROXY : URL du serveur proxy à utiliser pour les requêtes HTTPS.

Par exemple, configurez-les sous Linux ou macOS à l’aide des commandes suivantes :


export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"

Ensuite, transmettez trust_env=True à aiohttp.ClientSession() :

async with aiohttp.ClientSession(trust_env=True) as session:

Vous pouvez désormais appeler session.get() sans argument proxy


async with aiohttp.ClientSession(trust_env=True) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

Formidable ! AIOHTTP utilisera les proxys spécifiés dans les variables d’environnement pour chaque requête HTTP et HTTPS.

Suivez le lien pour en savoir plus, car le même mécanisme fonctionne également avec des proxys dans cURL.

Approches d’authentification par proxy

Toute tentative de connexion à un proxy authentifié sans les informations d’authentification appropriées entraînera une erreur 407 Authentification par proxy requise.

Supposons que la chaîne ci-dessous soit l’URL permettant de se connecter à un proxy HTTP authentifié :

http://admin:[email protected]:8928

Ici, l’URL du proxy est la suivante :

http://20.198.112.312:892

Tandis que les informations d’authentification sont les suivantes :

  • Nom d’utilisateur : admin
  • Mot de passe : pK5ip98NWp56l9sjy

AIOHTTP permet de gérer les proxys authentifiés de deux manières :

  1. Spécifiez les informations d’authentification directement dans l’URL du proxy :

async with session.get(
  'https://example.com/',
  proxy='http://admin:[email protected]:8928'
) as response:

2. Transmettez le nom d’utilisateur et le mot de passe à un objet aiohttp.BasicAuth(), puis utilisez-le dans l’option proxy_auth :


proxy_auth = aiohttp.BasicAuth('admin', 'pK5ip98NWp56l9sjy')
async with session.get(
    'https://example.com/',
    proxy="http://20.198.112.312:892",
    proxy_auth=proxy_auth
) as response:

Génial ! L’authentification par proxy AIOHTTP n’est plus un secret pour vous.

Éviter les erreurs de certificat SSL

Lorsque vous configurez un proxy dans AIOHTTP, vos requêtes peuvent échouer en raison de l’erreur suivante :

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain 

Pour éviter ces problèmes de certificat SSL, désactivez la vérification SSL avec SSL=False :


async with aiohttp.ClientSession() as session:
    async with session.get(
      'https://example.com',
      proxy='http://190.6.23.219:999',
      ssl=False # turn of SSL certificate verification
    ) as response:
        print(response.status)

Les erreurs de vérification du certificat SSL AIOHTTP disparaîtront immédiatement.

Rotation des proxys dans AIOHTTP

Si vous utilisez le même serveur proxy à plusieurs reprises, il est possible que le site cible bloque son adresse IP. Pour éviter cela, vous devez vous assurer que votre requête utilise différents serveurs proxy.

Voici comment procéder :

  1. Remplissez une liste Python avec de nombreuses URL de proxys.
  2. Choisissez au hasard une URL de proxy avant chaque requête.
  3. Définissez l’URL du proxy choisi dans AIOHTTP.

Le principal problème de cette approche est qu’elle implique un code générique et réutilisable. En outre, cela nécessite l’accès à un pool de serveurs proxy fiables, ce qui n’est pas gratuit. Heureusement, Bright Data propose une solution plus efficace ! Ses proxys rotatifs modifient automatiquement les adresses IP de sortie pour vous, sont disponibles dans 195 pays, offrent une disponibilité réseau exceptionnelle et garantissent un taux de réussite de 99,9 %

Dans le chapitre suivant, vous apprendrez comment commencer à utiliser des proxys rotatifs de Bright Data dans AIOHTTP.

Intégrer AIOHTTP à un proxy Bright Data

Bright Data contrôle les meilleurs serveurs proxys au monde, et assiste des entreprises du classement Fortune 500 et plus de 20 000 clients. Son réseau mondial de proxys comprend :

Il s’agit de l’un des réseaux proxy les plus importants et les plus fiables au monde !

Suivez les étapes ci-dessous pour apprendre à utiliser les proxys de Bright Data dans AIOHTTP.

Si vous avez déjà un compte, connectez-vous à Bright Data. Sinon, créez un compte gratuitement. Vous aurez accès au tableau de bord utilisateur suivant :

Cliquez sur le bouton « View proxy products » (Afficher les produits proxy) comme indiqué ci-dessous :

afficher les produits proxy

Vous allez être redirigé vers la page « Proxies & Scraping Infrastructure » (Proxys et infrastructure de scraping) suivante :

Faites défiler la page vers le bas, trouvez la carte « Residential Proxies » (Proxys résidentiels), puis cliquez sur le bouton « Get started » (Commencer) :

resi proxy

Vous accéderez au tableau de bord de configuration des proxys résidentiels. Suivez l’assistant guidé et configurez le service proxy en fonction de vos besoins. Si vous avez des doutes quant à la configuration du proxy, n’hésitez pas à contacter le support disponible 24 h/24 et 7 j/7.

Accédez à l’onglet « Access parameters » (Paramètres d’accès) et récupérez l’hôte, le port, le nom d’utilisateur et le mot de passe de votre proxy comme suit :

access parameter

Notez que le champ « Host » (Hôte) inclut déjà le port.

C’est tout ce dont vous avez besoin pour créer l’URL du proxy et l’utiliser dans AIOHTTP. Rassemblez toutes les informations et créez une URL avec la syntaxe suivante :

<Username>:<Password>@<Host>

Par exemple, dans ce cas, ce serait :

brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX

Basculez sur « Active proxy » (Proxy actif), suivez les dernières instructions et tout sera prêt !

active proxy

Votre snippet de proxy AIOHTTP pour l’intégration de Bright Data ressemblera à ce qui suit :


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://lumtest.com/myip.json',
          proxy='http://brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

Conclusion

Dans ce tutoriel d’intégration de proxys AIOHTTP, vous avez appris pourquoi vous devez utiliser des proxys et comment le faire avec aiohttp. Vous savez maintenant comment configurer un proxy HTTP, HTTPS ou SOCKS dans AIOHTTP, une bibliothèque cliente HTTP Python populaire. Comme montré, cela ne demande que quelques lignes de code !

Grâce à ce guide, vous avez également compris pourquoi vous ne devriez jamais utiliser de services proxy gratuits. Vous devriez plutôt adopter des serveurs proxy fiables provenant d’un fournisseur de services proxy réputé. Le meilleur fournisseur du marché ? Bright Data ! La procédure d’intégration des proxys dans AIOHTTP reste la même, mais les avantages des proxys premium sont infinis.