Intégrations · Débutant

Comment utiliser des proxys avec les requêtes Python, httpx et aiohttp

Trois lignes de configuration par bibliothèque, puis la même syntaxe de nom d'utilisateur partout : le pays, la ville et la session se trouvent dans l'URL du proxy, donc une seule passerelle dessert chaque tâche.

3 minutes de lecture 6 volets Vérifié Équipe éditoriale Proxy Cyber

L'URL du proxy#

Chaque bibliothèque HTTP Python prend un proxy comme URL. Avec Proxy Cyber, l'URL contient vos informations d'identification et le paramètres de ciblage dans le nom d'utilisateur ; le nom d'hôte est la passerelle et le port choisit le protocole.

URL proxy
# Rotating: a new United States household on every new connection
http://USER-cc-us:PASS@res.proxy-cyber.com:9000

# Sticky: one Berlin household held for 30 minutes under the id "job42"
http://USER-cc-de-city-berlin-sid-job42-ttl-30m:PASS@res.proxy-cyber.com:9000

# SOCKS5 with remote DNS (socks5h), same parameters
socks5h://USER-cc-us:PASS@res.proxy-cyber.com:9001

demandes#

La réutilisation des connexions et l'attribution des adresses IP sont des contrôles différents. Une session client réutilise les sockets ; seule la passerelle attribuée détermine le comportement de rotation et de session persistante. Utilisez les paramètres de session fournis avec votre service et vérifiez la sortie sur plusieurs requêtes. La fermeture d'un socket ou l'envoi de Connection: close ne garantit pas une IP différente.

demandes
import requests

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
proxies = {"http": PROXY, "https": PROXY}

# One request, one exit
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=30)
print(r.text)

# A sticky flow: same exit for every request of this session
sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000"
s = requests.Session()
s.proxies = {"http": sticky, "https": sticky}
s.get("https://example.com/product/1", timeout=30)
s.post("https://example.com/cart", json={"id": 1}, timeout=30)

httpx#

httpx prend un seul proxy= argument (anciennes versions : proxies=). Il prend en charge HTTP/2 vers la destination via le tunnel CONNECT et fonctionne de la même manière en code asynchrone.

httpx
import httpx

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

with httpx.Client(proxy=PROXY, timeout=30) as client:
    print(client.get("https://api.ipify.org").text)

# async, one sticky exit per task
import asyncio

async def fetch(sid: str, url: str) -> str:
    proxy = f"http://USER-cc-us-sid-{sid}-ttl-10m:PASS@res.proxy-cyber.com:9000"
    async with httpx.AsyncClient(proxy=proxy, timeout=30) as client:
        return (await client.get(url)).text

asyncio.run(fetch("task1", "https://api.ipify.org"))

aiohttp#

aiohttp prend le proxy par requête ou par session et parle nativement des proxys HTTP ; SOCKS5 a besoin du aiohttp-socks connecteur.

aiohttp
import aiohttp, asyncio

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get("https://api.ipify.org", proxy=PROXY, timeout=aiohttp.ClientTimeout(total=30)) as r:
            print(await r.text())

asyncio.run(main())

Rotation, maintien en vie et tentatives#

  • Une nouvelle connexion TCP est une nouvelle connexion de transport, et non la preuve d'une nouvelle sortie. Le mode de rotation attribué à la passerelle décide de la manière dont cette connexion est acheminée.
  • Utilisez un identifiant de session distinct pour chaque flux de travail indépendant, lorsque la passerelle attribuée le prend en charge. Confirmez la durée autorisée et les paramètres de localisation dans les détails de votre connexion. Un appareil résidentiel peut se déconnecter avant la durée demandée ; une session persistante n'est pas une garantie de la même IP pendant des jours. Pour une adresse fixe, comparez un produit statique dédié.
  • Classez la réponse avant de réessayer. Un 403 peut indiquer une règle d'accès qu'une autre IP ne résoudra pas. Pour 429, respectez Retry-After et réduisez le taux de requêtes ; utilisez une interruption limitée en cas de connexion temporaire ou de pannes de serveur. Réessayez les opérations de changement d'état uniquement lorsque vous pouvez empêcher les actions en double.
  • Définissez des délais d'attente selon le type de sortie : 15 s en connexion et 45 s en lecture pour le résidentiel, plus pour le mobile.

Économiser des gigaoctets#

Le trafic résidentiel est facturé au Go dans les deux sens. Demandez des réponses compressées (Accept-Encoding: gzip, br est activé par défaut dans ces bibliothèques), préférez les points de terminaison JSON au HTML et ne téléchargez jamais d'images, de polices ou de médias à moins qu'il ne s'agisse de données. Une page de 350 Ko est bon marché ; une page de 4 Mo avec des ressources ne l'est pas.

Les questions que les gens posent#

Pourquoi est-ce que je continue à recevoir la même adresse IP avec les requêtes ?

Les adresses IP répétées peuvent résulter d’un regroupement de connexions, d’une session persistante active ou du pool disponible. Comparez le mode de routage attribué et testez plusieurs requêtes avec des horodatages. Une request.Session gère les connexions et les cookies ; il ne sélectionne pas lui-même la sortie du proxy.

Ai-je besoin d’un proxy différent pour les sites HTTPS ?

Non. La même URL de proxy http:// gère les destinations HTTPS via un tunnel CONNECT ; TLS s'exécute de bout en bout entre votre code et le site.

Puis-je utiliser le même code pour les proxys mobiles ?

Oui : remplacez res.proxy-cyber.com par mob.proxy-cyber.com. Les ports, les informations d'identification et les paramètres sont identiques.

Votre compte

Gérez vos proxys dans un seul compte

Comparez les réseaux, passez des commandes et suivez votre solde et vos demandes d'assistance à partir d'un seul tableau de bord. Notre équipe examine les paiements et fournit les détails de connexion après la livraison.

Créer un compte