Guide Python · 2 min de lecture

Comment utiliser des proxies avec les requêtes Python

La bibliothèque requests route le trafic à travers un proxy avec un petit dictionnaire — mais le schéma que vous choisissez décide si votre DNS et votre IP d'origine restent cachés. Voici la version pratique, avec du code entièrement exécutable.

Le dictionnaire des proxies et pourquoi le schéma est important

La bibliothèque requests de Python communique avec un proxy à travers un seul dictionnaire. Les clés ne sont pas le protocole du proxy — elles représentent le schéma de l'URL cible. Ainsi, {"http": ..., "https": ...} indique à requests quel proxy utiliser lorsque la destination est un site HTTP ou HTTPS, et en pratique, les deux clés pointent vers le même point de terminaison.

Ce qui change réellement votre vie privée, c'est le schéma à l'intérieur de l'URL du proxy. Avec socks5:// votre propre machine résout d'abord le DNS puis se connecte via le proxy, ce qui peut révéler les noms d'hôtes que vous visitez. Avec socks5h:// le proxy résout le DNS pour vous, donc le nom d'hôte cible ne quitte jamais votre machine en clair. Pour un proxy s4m.online authentifié, préférez socks5h pour garder le DNS à distance et mieux cacher votre IP d'origine.

Schéma du proxyDNS résolu parPortInstaller
socks5h://Proxy (à distance)1080requests[socks]
socks5://Votre machine (locale)1080requests[socks]
http://Proxy3128Requêtes par défaut

Le support SOCKS nécessite PySocks (pip install "requests[socks]"); le point de terminaison HTTP fonctionne avec une installation par défaut. Les proxies s4m sont des SOCKS5 et HTTP de centre de données, facturés par gigaoctet — voir tarification. Si vous avez seulement besoin de points de terminaison jetables pour des tests rapides, la liste de proxies publics gratuits est un pool tiers séparé (utilisez à vos risques et périls). Vous hésitez entre un tunnel complet et un proxy ? Lisez la comparaison, l'aperçu VPN, ou plus de guides.

Exemple complet exécutable

Remplacez USER:PASS par vos identifiants de proxy. Cela vérifie votre IP de sortie, réutilise une session, puis tourne à travers un petit pool avec des délais et des tentatives.

python
import random
import requests
from requests.exceptions import RequestException

# --- Credentials & endpoints (replace with your s4m.online proxy user) ---
USER = "USER"
PASS = "PASS"
HOST = "proxy.s4m.online"

# SOCKS5 with REMOTE DNS (socks5h) — needs: pip install "requests[socks]"
SOCKS5 = f"socks5h://{USER}:{PASS}@{HOST}:1080"
# Plain HTTP CONNECT proxy — works with a stock requests install
HTTP   = f"http://{USER}:{PASS}@{HOST}:3128"

def proxies_for(proxy_url):
    # The "http"/"https" keys are the scheme of the TARGET url,
    # not the proxy's protocol — both can point at one proxy.
    return {"http": proxy_url, "https": proxy_url}

def check_ip(session, proxy):
    r = session.get(
        "https://api.ipify.org?format=json",
        proxies=proxies_for(proxy),
        timeout=(5, 15),   # (connect, read) seconds
    )
    r.raise_for_status()
    return r.json()["ip"]

# --- Per-session config: pools connections, keeps cookies/headers ---
with requests.Session() as s:
    s.headers.update({"User-Agent": "s4m-example/1.0"})
    print("Exit IP:", check_ip(s, SOCKS5))

# --- Rotate across a list, retrying on failure ---
POOL = [SOCKS5, HTTP]

def fetch(url, retries=3):
    last_err = None
    for attempt in range(1, retries + 1):
        proxy = random.choice(POOL)
        try:
            with requests.Session() as s:
                r = s.get(url, proxies=proxies_for(proxy), timeout=(5, 15))
                r.raise_for_status()
                return r
        except RequestException as e:
            last_err = e
            print(f"[{attempt}/{retries}] {proxy} failed: {e}")
    raise last_err

resp = fetch("https://httpbin.org/ip")
print(resp.json())

Par demande, par session ou global

Par demande

Passez proxies= à chaque appel : requests.get(url, proxies=proxies_for(SOCKS5), timeout=10). La forme la plus explicite, et la plus facile à échanger ou à faire tourner d'un appel à l'autre.

Par session

Définissez-le une fois avec session.proxies = proxies_for(SOCKS5). Chaque requête effectuée via cette session hérite du proxy et réutilise les connexions TCP, ce qui est plus rapide qu'un nouveau get() à chaque fois.

Global via l'environnement

les requêtes honorent HTTP_PROXY, HTTPS_PROXY et ALL_PROXY. Exportez ALL_PROXY=socks5h://USER:PASS@proxy.s4m.online:1080 et chaque requête est routée sans changement de code. Utilisez NO_PROXY pour exclure des hôtes, ou trust_env=False sur une Session pour ignorer l'environnement.

Choses qui déroutent les gens

L'authentification se fait dans l'URL

Mettez USER:PASS@ directement dans l'URL du proxy et les requêtes envoient les identifiants pour vous. Si votre mot de passe contient des caractères @, : ou /, encodez-le d'abord avec urllib.parse.quote.

Gardez DNS à distance

socks5 résout les noms d'hôtes sur votre machine ; socks5h les résout au proxy. Utilisez socks5h lorsque l'objectif est de garder vos recherches et votre IP d'origine hors du radar de la cible.

Réutiliser une session

Une requests.Session regroupe les connexions et persiste les cookies, donc une série de requêtes via un proxy est nettement plus rapide que d'appeler requests.get() à froid à chaque fois.

Laissez la vérification TLS activée

Un proxy ne fait que transmettre votre trafic — ce n'est pas une raison pour définir verify=False. Gardez la vérification des certificats activée afin qu'un intermédiaire ne puisse pas altérer silencieusement les réponses HTTPS.

FAQ

Questions, réponses

Les proxies SOCKS5 ont-ils besoin d'un package supplémentaire ?

Oui. requests a besoin de PySocks pour le support SOCKS : installez-le avec pip install "requests[socks]". Le point de terminaison HTTP sur le port 3128 fonctionne avec une installation standard de requests et sans dépendance supplémentaire.

Quelle est la différence entre socks5 et socks5h ?

Il s'agit de l'endroit où le DNS est résolu. socks5:// résout le nom d'hôte cible sur votre propre machine avant de se connecter ; socks5h:// demande au proxy de le résoudre. Utilisez socks5h pour éviter de divulguer les noms d'hôte que vous visitez.

Pourquoi mon IP de sortie ne change-t-elle pas lorsque je fais tourner ?

En général, le dictionnaire de proxies n'est pas réellement appliqué, ou une seule session réutilise une connexion en amont. Confirmez que chaque demande passe par proxies=, construisez une nouvelle session par proxy lors de la rotation, et imprimez la réponse d'un point de terminaison IP-echo pour vérifier.

S'agit-il d'IP résidentielles ?

Non. Les proxies s4m sont des points de terminaison SOCKS5 et HTTP de datacenter, authentifiés avec un nom d'utilisateur et un mot de passe et facturés par gigaoctet. La liste de proxy publique gratuite séparée est tierce et non validée pour un usage en production.

Comment sauter un proxy mort dans une liste ?

Enveloppez chaque tentative dans try/except requests.exceptions.RequestException, puis réessayez avec le prochain proxy de votre pool. L'exemple exécutable ci-dessus fait exactement cela avec une petite boucle de réessai.

Proxies conçus pour cacher votre IP d'origine

Proxies SOCKS5 et HTTP authentifiés de datacenter, pay-as-you-go avec un IP personnel dédié en option. Dirigez les requêtes vers proxy.s4m.online et c'est parti.

Les gens ont trouvé cette page en recherchant

Vraies phrases de recherche auxquelles cette page répond — les liens ouvrent la page qui les couvre en profondeur.