Risposta rapida
Cosa significa Cannot connect to proxy (ProxyError) con un proxy?
'Impossibile connettersi al proxy' è un errore wrapper: requests e urllib3 di Python mettono la ragione reale al suo interno. Leggi la causa più profonda. 'Connessione rifiutata' o timeout significa un problema di host, porta o rete; 'Impossibile risolvere' significa DNS; 'Connessione tunnel fallita: 407' significa credenziali. Con CrawlRelay, ognuno di questi ha una soluzione in una riga.
Cannot connect to proxy (ProxyError) a colpo d'occhio
| Errore | Cannot connect to proxy (ProxyError) |
|---|---|
| Tipo | Errore libreria client (Python, Node.js) |
| Inviato da | Il tuo client HTTP, prima o durante la connessione al proxy |
| Definito in | Library error; read the nested cause for the real reason |
| Riprovarlo? | Dipende dalla causa più profonda |
| Prima verifica | Leggi l’eccezione più interna: rifiutato, timeout, risoluzione nome o codice di stato |
Cosa significa Cannot connect to proxy (ProxyError)?
urllib3 genera un ProxyError per ogni errore che coinvolge il proxy, e requests lo trasmette. L'informazione utile è nell'eccezione annidata, che il traceback stampa alla fine di una lunga riga.
I client Node.js si comportano diversamente: riportano direttamente l'errore del socket, come ECONNREFUSED o ETIMEDOUT, spesso senza indicare che l'indirizzo era quello del proxy.
Com'è 'Cannot connect to proxy' in Python, curl, Node.js e browser?
Lo stesso errore si presenta in modo diverso in ogni strumento. Questi sono i messaggi da cercare nei log:
- Rifiutato:
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS:
NameResolutionError(... Failed to resolve ...)dentroProxyError - Credenziali:
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - Errore gateway:
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js:
Error: connect ECONNREFUSED,ETIMEDOUToENOTFOUND, seguito dall'indirizzo del proxy
Cosa causa 'Cannot connect to proxy'?
Probabilmente prima:
- Host o porta sbagliati nell'URL del proxy.
- Mancanza dello schema:
host:portsenzahttp://è interpretato in modi sorprendenti da alcune librerie. - Traffico in uscita bloccato sulla rete o server.
- Errori di credenziali o gateway che emergono durante la fase CONNECT, racchiusi nella stessa eccezione.
- Variabili d'ambiente come
HTTPS_PROXYche puntano a un vecchio proxy e sovrascrivono il tuo codice.
Come diagnostico 'Cannot connect to proxy' passo dopo passo?
- Stampa l'eccezione completa e leggi la causa annidata più recente.
- Stampa
requests.utils.get_environ_proxies(url)o le variabiliHTTP_PROXY,HTTPS_PROXYeNO_PROXYper vedere cos'altro è configurato. - Esegui il test curl qui sotto dalla stessa macchina.
- Associa la causa con la lista delle soluzioni qui sotto.
# 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_URLCome risolvo 'Cannot connect to proxy'?
- Rifiutato o timeout: correggi host e porta, o apri il traffico in uscita verso il gateway.
- Impossibile risolvere: controlla il DNS sulla macchina; prova l'host con
nslookup. - 407: correggi e codifica URL le credenziali. Vedi 407 Proxy Authentication Required.
- 502 o 504: riprova su un nuovo exit. Vedi 502 e 504.
- Proxy d'ambiente indesiderato: imposta
session.trust_env = Falsein requests, o pulisci le variabili.
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)Devo riprovare dopo 'Cannot connect to proxy'?
Riprova solo le cause a livello di rete che possono cambiare: timeout ed errori di gateway come 502 o 504. Una connessione rifiutata, un fallimento DNS o un 407 si ripeteranno finché non cambi la configurazione, quindi trattali come errori fatali nella gestione degli errori.
Come si applica Cannot connect to proxy (ProxyError) a CrawlRelay?
Per CrawlRelay, l'URL del proxy è http://USERNAME:PASSWORD@ seguito dall'host del gateway e dalla porta HTTP indicata qui sotto, per destinazioni HTTP e HTTPS allo stesso modo. Usa lo stesso URL http:// per entrambe le chiavi http e https in requests: lo schema indica il protocollo parlato col proxy, non col sito web.
Gateway: gw.crawlrelay.com, porta 7777 (HTTP, HTTPS tramite CONNECT) e porta 7778 (SOCKS5). Formato username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Correlato: SSL: WRONG_VERSION_NUMBER · 407 · Guida Python.
Cannot connect to proxy (ProxyError): domande frequenti dagli sviluppatori
Cosa significa 'Max retries exceeded with url' con un proxy?
Significa che urllib3 ha rinunciato dopo aver esaurito i tentativi, e la ragione reale segue nella parte 'Caused by' del messaggio. Con un proxy, quella parte è di solito un ProxyError con una causa annidata: connessione rifiutata, timeout, fallimento nella risoluzione del nome oppure uno stato tunnel come 407.
Perché requests usa un proxy che non ho configurato?
requests legge le variabili d'ambiente HTTP_PROXY, HTTPS_PROXY e NO_PROXY per impostazione predefinita, e su Windows legge anche le impostazioni proxy di sistema. Un valore residuo sovrascrive così le tue aspettative. Imposta session.trust_env = False, o passa i proxy esplicitamente a ogni richiesta.
Devo scrivere http:// o https:// davanti all'indirizzo del proxy?
Scrivi http:// per un proxy HTTP, anche se il sito usa HTTPS. Lo schema descrive come il client comunica col proxy. Scrivere https:// fa sì che le versioni più recenti di urllib3 inizino TLS col proxy, cosa che genera un errore SSL su una porta proxy HTTP semplice.
Altri errori proxy in questo riferimento
Codici di stato HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Errori del browser e client
Errori di connessione e TLS
Proxy residenziali con documentazione che copre i casi di errore
Proxy residenziali CrawlRelay da 0,50 USD/GB, traffico che non scade mai.