Réponse rapide
Que signifie Cannot connect to proxy (ProxyError) avec un proxy ?
« Impossible de se connecter au proxy » est une erreur englobante : les modules requests et urllib3 de Python y placent la cause réelle. Lisez la cause la plus profonde. « Connexion refusée » ou un délai dépassé signifient un problème d’hôte, de port ou de réseau ; « Échec de résolution » signifie DNS ; « Échec de connexion tunnel : 407 » signifie des problèmes d’identifiants. Avec CrawlRelay, chacun a une solution d’une ligne.
Cannot connect to proxy (ProxyError) en un coup d'œil
| Erreur | Cannot connect to proxy (ProxyError) |
|---|---|
| Type | Erreur bibliothèque client (Python, Node.js) |
| Envoyé par | Votre client HTTP, avant ou pendant la communication avec le proxy |
| Défini dans | Library error; read the nested cause for the real reason |
| Réessayer ? | Dépend de la cause imbriquée |
| Vérification initiale | Lisez l’exception la plus interne : refus, délai expiré, résolution de nom, ou un code d’état |
Que signifie Cannot connect to proxy (ProxyError) ?
urllib3 déclenche une ProxyError pour chaque échec lié au proxy, et requests la transmet. L’information utile se trouve dans l’exception imbriquée, dont la trace d’exécution s’affiche en fin d’une ligne longue.
Les clients Node.js se comportent différemment : ils rapportent directement l’erreur de socket, comme ECONNREFUSED ou ETIMEDOUT, souvent sans indiquer que l’adresse était celle du proxy.
À quoi ressemble 'Cannot connect to proxy' en Python, curl, Node.js et navigateurs ?
La même erreur s'affiche différemment selon chaque outil. Voici les messages à rechercher dans vos logs :
- Refusé :
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS :
NameResolutionError(... Failed to resolve ...)dans laProxyError - Identifiants :
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - Erreur de passerelle :
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js :
Error: connect ECONNREFUSED,ETIMEDOUTouENOTFOUND, suivi de l’adresse du proxy
Quelles sont les causes de 'Cannot connect to proxy' ?
Probablement en premier lieu :
- Hôte ou port erroné dans l’URL de proxy.
- Absence de schéma :
host:portsanshttp://est analysé de manière surprenante par certaines bibliothèques. - Trafic sortant bloqué sur votre réseau ou serveur.
- Erreurs d’identifiants ou de passerelle apparues lors de l’étape CONNECT, encapsulées dans la même exception.
- Variables d’environnement comme
HTTPS_PROXYpointant vers un ancien proxy et qui priment sur votre code.
Comment diagnostiquer 'Cannot connect to proxy' étape par étape ?
- Affichez l’exception complète et lisez la dernière cause imbriquée.
- Affichez
requests.utils.get_environ_proxies(url)ou les variablesHTTP_PROXY,HTTPS_PROXYetNO_PROXYpour voir les autres configurations. - Lancez le test curl ci-dessous depuis la même machine.
- Associez la cause à la liste de corrections ci-dessous.
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLComment résoudre 'Cannot connect to proxy' ?
- Refusé ou délai dépassé : corrigez l’hôte et le port ou ouvrez le trafic sortant vers la passerelle.
- Échec de résolution : vérifiez le DNS sur la machine ; testez l’hôte avec
nslookup. - 407 : corrigez et encodez les identifiants dans l’URL. Voir 407 Proxy Authentication Required.
- 502 ou 504 : retentez via une nouvelle sortie. Voir 502 et 504.
- Proxy indésirable en variable d’environnement : positionnez
session.trust_env = Falsedans requests, ou nettoyez ces variables.
from urllib.parse import quote
import requests
user = "USERNAME-country-us"
password = "p@ss:word/1" # example containing special characters
# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy} # http:// for both keys
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=(10, 30))
print(r.status_code, r.text)Dois-je réessayer après 'Cannot connect to proxy' ?
Retentez seulement les causes réseau changeantes : délais dépassés et erreurs de passerelle comme 502 ou 504. Une connexion refusée, un échec DNS ou 407 se répéteront tant que la configuration n’est pas modifiée, donc considérez-les comme fatals dans votre gestion d’erreur.
Quelle est l'incidence de Cannot connect to proxy (ProxyError) sur CrawlRelay ?
Pour CrawlRelay, l’URL du proxy est http://USERNAME:PASSWORD@ suivie de l’hôte de passerelle et du port HTTP listés ci-dessous, pour cibles HTTP et HTTPS. Utilisez la même URL http:// pour les clés http et https dans requests : le schéma désigne le protocole parlé au proxy, pas au site.
Passerelle : gw.crawlrelay.com, port 7777 (HTTP, HTTPS via CONNECT) et port 7778 (SOCKS5). Format du nom d'utilisateur : USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Voir aussi : SSL: WRONG_VERSION_NUMBER · 407 · Guide Python.
Cannot connect to proxy (ProxyError) : questions fréquentes des développeurs
Que signifie « Max retries exceeded with url » avec un proxy ?
Cela signifie qu’urllib3 a renoncé après son budget de tentatives, la cause réelle suit dans la partie « Caused by » du message. Avec un proxy, cette partie est généralement un ProxyError avec une cause imbriquée : connexion refusée, délai dépassé, échec de résolution de nom ou état tunnel comme 407.
Pourquoi requests utilise-t-il un proxy que je n’ai pas configuré ?
requests lit par défaut les variables d’environnement HTTP_PROXY, HTTPS_PROXY et NO_PROXY, sur Windows il lit aussi les paramètres système de proxy. Une valeur héritée outrepasse vos attentes. Positionnez session.trust_env = False, ou transmettez explicitement les proxies à chaque requête.
Dois-je écrire http:// ou https:// devant l’adresse du proxy ?
Écrivez http:// pour un proxy HTTP, même si le site est en HTTPS. Le schéma décrit comment votre client s’adresse au proxy. Écrire https:// fait que les versions récentes d’urllib3 démarrent un TLS avec le proxy, ce qui échoue sur un port de proxy HTTP classique avec une erreur SSL.
Autres erreurs de proxy dans cette référence
Codes d'état HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Erreurs du navigateur et du client
Erreurs de connexion et TLS
Proxies résidentiels avec documentation couvrant les cas de défaillance
Proxies résidentiels CrawlRelay de 0,50 $US/GB, trafic sans expiration.