Kort antwoord
Wat betekent Cannot connect to proxy (ProxyError) bij een proxy?
'Kan geen verbinding maken met proxy' is een wrapperfout: de echte reden zit erin verborgen door Python's requests en urllib3. Lees de diepste oorzaak. 'Verbinding geweigerd' of een time-out betekent een probleem met host, poort of netwerk; 'Kon niet resolveren' betekent DNS; 'Tunnelverbinding mislukt: 407' betekent een probleem met de inloggegevens. Bij CrawlRelay heeft elk van deze een éénregelige oplossing.
Cannot connect to proxy (ProxyError) in één oogopslag
| Fout | Cannot connect to proxy (ProxyError) |
|---|---|
| Type | Clientbibliotheekfout (Python, Node.js) |
| Verzonden door | Je HTTP-client, vóór of tijdens communicatie met de proxy |
| Gedefinieerd in | Library error; read the nested cause for the real reason |
| Opnieuw proberen? | Afhankelijk van de onderliggende oorzaak |
| Eerst controleren | Lees de binnenste uitzondering: geweigerd, time-out, naamresolutie of een statuscode |
Wat betekent Cannot connect to proxy (ProxyError)?
urllib3 werpt elke keer een ProxyError op bij een mislukking die met de proxy te maken heeft, en requests geeft deze door. De nuttige informatie zit in de geneste uitzondering, die de traceback aan het einde van een lange regel toont.
Node.js clients gedragen zich anders: zij melden direct de socketfout, zoals ECONNREFUSED of ETIMEDOUT, vaak zonder te zeggen dat het adres dat van de proxy was.
Hoe ziet 'Cannot connect to proxy' eruit in Python, curl, Node.js en browsers?
Dezelfde fout verschijnt anders in elk hulpmiddel. Dit zijn de berichten om in je logs te zoeken:
- Geweigerd:
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS:
NameResolutionError(... Failed to resolve ...)binnen deProxyError - Inloggegevens:
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - Gateway-fout:
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js:
Error: connect ECONNREFUSED,ETIMEDOUTofENOTFOUND, gevolgd door het proxy-adres
Wat veroorzaakt 'Cannot connect to proxy'?
Waarschijnlijk eerst:
- Verkeerde host of poort in de proxy-URL.
- Ontbrekende scheme:
host:portzonderhttp://wordt door sommige libraries verrassend geparsed. - Geblokkeerd uitgaand verkeer op jouw netwerk of server.
- Inloggegevens- of gatewayfouten die optreden tijdens de CONNECT-stap, verpakt in dezelfde uitzondering.
- Omgevingsvariabelen zoals
HTTPS_PROXYdie naar een oude proxy wijzen en je code overschrijven.
Hoe diagnosticeer ik 'Cannot connect to proxy' stap voor stap?
- Print de volledige uitzondering en lees de laatste geneste oorzaak.
- Print
requests.utils.get_environ_proxies(url)of de variabelenHTTP_PROXY,HTTPS_PROXYenNO_PROXYom te zien wat er nog meer is ingesteld. - Voer de curl-test hieronder uit vanaf dezelfde machine.
- Koppel de oorzaak aan de lijst met oplossingen hieronder.
# 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_URLHoe los ik 'Cannot connect to proxy' op?
- Geweigerd of time-out: fix de host en poort, of open uitgaand verkeer naar de gateway.
- Kon niet resolveren: controleer DNS op de machine; probeer de host met
nslookup. - 407: fix en URL-encode de inloggegevens. Zie 407 Proxy Authentication Required.
- 502 of 504: probeer opnieuw met een nieuwe exit. Zie 502 en 504.
- Ongewenste proxy in omgeving: zet
session.trust_env = Falsein requests, of ruim de variabelen op.
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)Moet ik opnieuw proberen na 'Cannot connect to proxy'?
Herhaal alleen netwerkfouten die kunnen veranderen: time-outs en gateway-fouten zoals 502 of 504. Een geweigerde verbinding, DNS-fout of 407 herhaalt zich tot je de configuratie verandert; maak die fataal in je foutafhandeling.
Hoe geldt Cannot connect to proxy (ProxyError) voor CrawlRelay?
Voor CrawlRelay is de proxy-URL http://USERNAME:PASSWORD@ gevolgd door de onderstaande gateway-host en HTTP-poort, voor zowel HTTP- als HTTPS-doelen. Gebruik dezelfde http:// URL voor zowel de http als https keys in requests: het schema bepaalt het protocol tussen client en proxy, niet tussen client en website.
Gateway: gw.crawlrelay.com, poort 7777 (HTTP, HTTPS via CONNECT) en poort 7778 (SOCKS5). Gebruikersnaamformaat: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Gerelateerd: SSL: WRONG_VERSION_NUMBER · 407 · Python-gids.
Cannot connect to proxy (ProxyError): vragen die ontwikkelaars stellen
Wat betekent 'Max retries exceeded with url' met een proxy?
Dat betekent dat urllib3 opgaf na zijn retries; de echte reden volgt in het 'Caused by'-gedeelte. Bij een proxy is dat meestal een ProxyError met een geneste oorzaak: verbinding geweigerd, time-out, naam-resolutie mislukt of een tunnelstatus zoals 407.
Waarom gebruikt requests een proxy die ik niet heb geconfigureerd?
requests leest standaard de omgevingsvariabelen HTTP_PROXY, HTTPS_PROXY en NO_PROXY, en op Windows ook de systeemproxy-instellingen. Een achtergebleven waarde overschrijft dan jouw verwachtingen. Zet session.trust_env = False, of geef de proxies expliciet door bij elke aanvraag.
Schrijf ik http:// of https:// voor het proxy-adres?
Schrijf http:// voor een HTTP-proxy, zelfs als de website HTTPS gebruikt. Het schema omschrijft hoe je client met de proxy praat. Schrijven van https:// laat nieuwere urllib3-versies TLS starten met de proxy, wat faalt op een plain HTTP-proxy-poort met een SSL-fout.
Andere proxyfouten in deze referentie
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- en clientfouten
Verbindings- en TLS-fouten
Residentiële proxy's met documentatie die de faalgevallen beschrijft
CrawlRelay residentiële proxy's van US$ 0,50/GB, verkeer dat nooit verloopt.