Szybka odpowiedź
Co oznacza Cannot connect to proxy (ProxyError) w kontekście proxy?
'Nie można połączyć się z proxy' to błąd opakowujący: biblioteki requests i urllib3 w Pythonie zawierają w nim prawdziwy powód. Przeczytaj najgłębszą przyczynę. 'Połączenie odrzucone' lub timeout oznacza problem z hostem, portem lub siecią; 'Nie udało się rozwiązać' oznacza DNS; 'Nieudane połączenie tunelu: 407' oznacza błędne dane uwierzytelniające. W CrawlRelay każdy z nich da się naprawić w jednym zdaniu.
Cannot connect to proxy (ProxyError) w skrócie
| Błąd | Cannot connect to proxy (ProxyError) |
|---|---|
| Typ | Błąd biblioteki klienta (Python, Node.js) |
| Wysłane przez | Twój klient HTTP, przed lub podczas rozmowy z proxy |
| Zdefiniowano w | Library error; read the nested cause for the real reason |
| Spróbować ponownie? | Zależy od ukrytej przyczyny |
| Najpierw sprawdź | Przeczytaj najgłębszy wyjątek: odmowa, timeout, rozpoznanie nazwy lub kod statusu |
Co oznacza Cannot connect to proxy (ProxyError)?
urllib3 zgłasza ProxyError dla każdej awarii związanej z proxy, a requests przekazuje ten błąd dalej. Przydatne informacje są w zagnieżdżonym wyjątku, który traceback pokazuje na końcu długiej linii.
Klienci Node.js zachowują się różnie: raportują błąd gniazda bezpośrednio, np. ECONNREFUSED lub ETIMEDOUT, często nie mówiąc, że adres to proxy.
Jak wygląda 'Cannot connect to proxy' w Python, curl, Node.js i przeglądarkach?
Ten sam błąd wyświetla się inaczej w każdym narzędziu. Oto komunikaty, które warto wyszukać w logach:
- Odrzucone:
ProxyError('Unable to connect to proxy', NewConnectionError(... Connection refused)) - DNS:
NameResolutionError(... Failed to resolve ...)wProxyError - Dane uwierzytelniające:
OSError('Tunnel connection failed: 407 Proxy Authentication Required') - Błąd bramy:
OSError('Tunnel connection failed: 502 Bad Gateway') - Node.js:
Error: connect ECONNREFUSED,ETIMEDOUTlubENOTFOUND, a potem adres proxy
Co powoduje 'Cannot connect to proxy'?
Najczęściej na początku:
- Zły host lub port w URL proxy.
- Brak schematu:
host:portbezhttp://jest nieoczekiwanie interpretowane przez niektóre biblioteki. - Zablokowany ruch wychodzący w Twojej sieci lub na serwerze.
- Błędy uwierzytelniania lub bramy pojawiające się przy kroku CONNECT, opakowane w ten sam wyjątek.
- Zmienna środowiskowa taka jak
HTTPS_PROXYwskazująca na stare proxy i nadpisująca konfigurację.
Jak krok po kroku zdiagnozować 'Cannot connect to proxy'?
- Wypisz pełny wyjątek i przeczytaj ostatnią zagnieżdżoną przyczynę.
- Wypisz zmienne
requests.utils.get_environ_proxies(url)lubHTTP_PROXY,HTTPS_PROXYiNO_PROXYaby zobaczyć, co jeszcze jest ustawione. - Uruchom poniższy test curl na tym samym urządzeniu.
- Dopasuj przyczynę do listy rozwiązań poniżej.
# 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_URLJak naprawić 'Cannot connect to proxy'?
- Odrzucone lub przeterminowane: popraw host i port albo otwórz ruch wychodzący do bramy.
- Nie udało się rozwiązać: sprawdź DNS na maszynie; spróbuj hosta z
nslookup. - 407: popraw i zakoduj w URL dane uwierzytelniające. Zobacz 407 Proxy Authentication Required.
- 502 lub 504: spróbuj ponownie przez nowy exit. Zobacz 502 i 504.
- Niechciane proxy z zmiennych środowiskowych: ustaw
session.trust_env = Falsew requests lub wyczyść zmienne.
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)Czy warto ponawiać próbę po 'Cannot connect to proxy'?
Powtarzaj tylko przyczyny na poziomie sieci, które mogą się zmienić: timeouty i błędy bramy takie jak 502 lub 504. Odmowa połączenia, awaria DNS lub 407 powtórzą się, dopóki nie zmienisz konfiguracji – traktuj je jako krytyczne przy obsłudze błędów.
Jak Cannot connect to proxy (ProxyError) odnosi się do CrawlRelay?
Dla CrawlRelay URL proxy to http://USERNAME:PASSWORD@ po którym następuje host bramy i port HTTP niżej, dla celów HTTP i HTTPS jednakowo. Używaj tego samego URL http:// dla kluczy http i https w requests: schemat opisuje protokół z proxy, nie ze stroną.
Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS przez CONNECT) i port 7778 (SOCKS5). Format nazwy użytkownika: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Powiązane: SSL: WRONG_VERSION_NUMBER · 407 · Python guide.
Cannot connect to proxy (ProxyError): pytania, które zadają deweloperzy
Co oznacza 'Max retries exceeded with url' przy proxy?
Oznacza to, że urllib3 poddało się po wyczerpaniu limitu prób, a prawdziwa przyczyna jest w części 'Caused by' komunikatu. Przy proxy to zwykle ProxyError z zagnieżdżoną przyczyną: odmowa połączenia, timeout, błąd nazw lub status tunelu jak 407.
Dlaczego requests używa proxy, którego nie skonfigurowałem?
requests domyślnie czyta zmienne środowiskowe HTTP_PROXY, HTTPS_PROXY i NO_PROXY, a na Windows też systemowe ustawienia proxy. Stara wartość nadpisuje Twoje założenia. Ustaw session.trust_env = False lub podawaj proxy jawnie przy każdym żądaniu.
Czy mam wpisać http:// czy https:// przed adresem proxy?
Wpisz http:// dla proxy HTTP, nawet gdy witryna jest HTTPS. Schemat mówi, jak klient komunikuje się z proxy. Wpisanie https:// powoduje, że nowsze urllib3 zaczynają TLS z proxy, co kończy się błędem SSL na porcie zwykłego proxy HTTP.
Inne błędy proxy w tym odniesieniu
Kody statusu HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Błędy w przeglądarce i kliencie
Błędy połączenia i TLS
Proxy rezydencjalne z dokumentacją opisującą przypadki błędów
CrawlRelay proxy rezydencjalne od 0,50 USD/GB, ruch, który nigdy nie wygasa.