Kurze Antwort
Was bedeutet Cannot connect to proxy (ProxyError) bei einem Proxy?
'Keine Verbindung zum Proxy möglich' ist ein Wrapper-Fehler: Python's requests und urllib3 legen den tatsächlichen Grund darin ab. Lesen Sie die innerste Ursache. 'Verbindung verweigert' oder ein Timeout bedeutet ein Problem mit Host, Port oder Netzwerk; 'Auflösung fehlgeschlagen' bedeutet DNS; 'Tunnelverbindung fehlgeschlagen: 407' bedeutet Anmeldedaten. Bei CrawlRelay hat jeder dieser Fälle eine Ein-Zeilen-Lösung.
Cannot connect to proxy (ProxyError) auf einen Blick
| Fehler | Cannot connect to proxy (ProxyError) |
|---|---|
| Typ | Client-Bibliotheksfehler (Python, Node.js) |
| Gesendet von | Ihr HTTP-Client, vor oder während der Kommunikation mit dem Proxy |
| Definiert in | Library error; read the nested cause for the real reason |
| Noch einmal versuchen? | Hängt von der verschachtelten Ursache ab |
| Zuerst prüfen | Lesen Sie die innerste Ausnahme: verweigert, Zeitüberschreitung, Namensauflösung oder ein Statuscode |
Was bedeutet Cannot connect to proxy (ProxyError)?
urllib3 wirft für jeden Fehler, der den Proxy betrifft, einen ProxyError, den requests weiterreicht. Die nützlichen Informationen stecken in der verschachtelten Ausnahme, die der Traceback am Ende einer langen Zeile ausgibt.
Node.js-Clients verhalten sich unterschiedlich: sie melden direkt den Socket-Fehler, z.B. ECONNREFUSED oder ETIMEDOUT, oft ohne zu erläutern, dass die Adresse zum Proxy gehört.
Wie sieht 'Cannot connect to proxy' in Python, curl, Node.js und Browsern aus?
Der gleiche Fehler wird in jedem Tool anders angezeigt. Hier sind die Meldungen, nach denen Sie in Ihren Logs suchen sollten:
- Verweigert:
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS:
NameResolutionError(... Failed to resolve ...)innerhalb vonProxyError - Anmeldedaten:
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - Gateway-Fehler:
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js:
Error: connect ECONNREFUSED,ETIMEDOUToderENOTFOUND, gefolgt von der Proxy-Adresse
Was verursacht 'Cannot connect to proxy'?
Wahrscheinlich zuerst:
- Falscher Host oder Port in der Proxy-URL.
- Fehlendes Schema:
host:portohnehttp://wird von manchen Bibliotheken unerwartet interpretiert. - Blockierter ausgehender Datenverkehr in Ihrem Netzwerk oder Server.
- Anmelde- oder Gateway-Fehler, die während des CONNECT-Schritts auftreten, in derselben Ausnahme gebündelt.
- Umgebungsvariablen wie z.B.
HTTPS_PROXY, die auf einen alten Proxy verweisen und Ihren Code überschreiben.
Wie diagnostiziere ich 'Cannot connect to proxy' Schritt für Schritt?
- Drucken Sie die vollständige Ausnahme aus und lesen Sie die letzte verschachtelte Ursache.
- Drucken Sie
requests.utils.get_environ_proxies(url)oder die VariablenHTTP_PROXY,HTTPS_PROXYundNO_PROXYaus, um weitere Konfigurationen zu sehen. - Führen Sie den unten stehenden curl-Test auf derselben Maschine aus.
- Ordnen Sie die Ursache der unten stehenden Fehlerliste zu.
# 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_URLWie behebe ich 'Cannot connect to proxy'?
- Verweigert oder Zeitüberschreitung: Korrigieren Sie Host und Port, oder erlauben Sie ausgehenden Datenverkehr zum Gateway.
- Auflösung fehlgeschlagen: Überprüfen Sie DNS auf der Maschine; testen Sie den Host mit
nslookup. - 407: Korrigieren und URL-kodieren Sie die Anmeldedaten. Siehe 407 Proxy Authentication Required.
- 502 oder 504: Versuchen Sie es mit einem neuen Ausgang. Siehe 502 und 504.
- Unerwünschter Umgebungsproxy: Setzen Sie
session.trust_env = Falsein requests oder löschen Sie die Variablen.
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)Soll ich nach 'Cannot connect to proxy' einen erneuten Versuch starten?
Wiederholen Sie nur Netzwerkebenen-Fehler, die sich ändern können: Timeouts und Gateway-Fehler wie 502 oder 504. Eine verweigerte Verbindung, DNS-Fehler oder ein 407 wiederholt sich, bis Sie die Konfiguration ändern. Behandeln Sie diese daher als schwerwiegende Fehler.
Wie wirkt sich Cannot connect to proxy (ProxyError) auf CrawlRelay aus?
Für CrawlRelay ist die Proxy-URL http://USERNAME:PASSWORD@, gefolgt von dem unten angegebenen Gateway-Host und HTTP-Port, für HTTP- und HTTPS-Ziele gleichermaßen. Verwenden Sie dieselbe http://-URL für die http- und https-Schlüssel in requests: Das Schema gibt das Protokoll an, das zum Proxy gesprochen wird, nicht zur Website.
Gateway: gw.crawlrelay.com, Port 7777 (HTTP, HTTPS über CONNECT) und Port 7778 (SOCKS5). Benutzername im Format: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Verwandt: SSL: WRONG_VERSION_NUMBER · 407 · Python-Leitfaden.
Cannot connect to proxy (ProxyError): Fragen, die Entwickler stellen
Was bedeutet 'Max retries exceeded with url' bei einem Proxy?
Es bedeutet, dass urllib3 nach dem Aufbrauchen des Retry-Budgets aufgegeben hat, der eigentliche Grund steht im Teil 'Caused by' der Meldung. Bei einem Proxy ist dieser Teil meist ein ProxyError mit einer verschachtelten Ursache: Verbindung verweigert, Timeout, Namensauflösungsfehler oder ein Tunnelstatus wie 407.
Warum verwendet requests einen Proxy, den ich nicht konfiguriert habe?
requests liest standardmäßig die Umgebungsvariablen HTTP_PROXY, HTTPS_PROXY und NO_PROXY, und unter Windows auch die Systemeinstellungen für Proxy. Ein übrig gebliebener Wert überschreibt dann Ihre Einstellungen. Setzen Sie session.trust_env = False oder übergeben Sie die Proxys explizit bei jeder Anfrage.
Soll ich http:// oder https:// vor die Proxy-Adresse schreiben?
Schreiben Sie http:// für einen HTTP-Proxy, selbst wenn die Website HTTPS verwendet. Das Schema beschreibt, wie Ihr Client mit dem Proxy spricht. https:// bewirkt, dass neuere urllib3-Versionen TLS mit dem Proxy starten, was auf einem einfachen HTTP-Proxy-Port mit einem SSL-Fehler scheitert.
Weitere Proxy-Fehler in diesem Leitfaden
HTTP-Statuscodes
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Browser- und Clientfehler
Verbindungs- und TLS-Fehler
Residential-Proxys mit Dokumentationen, die Fehlerfälle abdecken
CrawlRelay Residential-Proxys von 0,50 $/GB, Traffic, der nie abläuft.