Kody błędów curl przy pracy przez proxy

curl kończy działanie kodem liczbowym i krótkim komunikatem. Przez proxy najczęściej pojawia się sześć kodów, a numer pokazuje, na którym etapie zatrzymało się żądanie.

Zaktualizowano · Redakcja Prokso

W skrócie
  • Kody 5, 7 i 28 oznaczają, że żądanie nie dotarło do proxy: nazwa hosta, połączenie lub limit czasu
  • Kody 56 i 97 najczęściej oznaczają, że protokół nie pasuje do portu lub login odrzucono
  • Uruchom polecenie ponownie z opcją -v i sprawdź host gw.prokso.com, port i schemat adresu

Co oznacza błąd

Liczba w nawiasie w linii curl: (N) to kod wyjścia, taki sam jak kod błędu libcurl. Dokumentacja libcurl opisuje je tak: (5) CURLE_COULDNT_RESOLVE_PROXY – nie udało się ustalić adresu proxy na podstawie nazwy hosta; (7) CURLE_COULDNT_CONNECT – nie udało się połączyć z hostem lub proxy; (28) CURLE_OPERATION_TIMEDOUT – upłynął ustawiony limit czasu.

(35) CURLE_SSL_CONNECT_ERROR – problem gdzieś podczas uzgadniania SSL/TLS; (56) CURLE_RECV_ERROR – błąd odbierania danych z sieci; (97) CURLE_PROXY – błąd uzgadniania z proxy. Dla kodu 97 libcurl osobno podaje, co dokładnie poszło nie tak.

Kody 5, 7 i 28 zwykle oznaczają, że żądanie nie dotarło do proxy. Kody 56 i 97 – że połączenie jest, ale program i proxy się nie dogadały. Kod 35 najczęściej dotyczy szyfrowania między Tobą a stroną, a nie samego proxy.

Przyczyny

  • (5) – nazwa bramy nie zamienia się na adres. Literówka w nazwie hosta, zbędny znak w linii lub niedziałający DNS w Twojej sieci. Prawidłowy host to gw.prokso.com.
  • (7) – połączenie odrzucone. Brama albo sieć po Twojej stronie odmówiła połączenia: na przykład firmowa zapora blokuje wyjście na niestandardowe porty.
  • (28) – brak odpowiedzi na czas. Na portach spoza 823, 824 i 10000–20000 brama w ogóle nie odpowiada, więc curl czeka do upływu limitu. Tak samo kończy się zbyt krótki limit w opcjach -m lub --connect-timeout.
  • (35) – błąd TLS ze stroną. Uzgadnianie TLS z samą stroną się nie udało. Najczęściej antywirus lub sieć firmowa przechwytuje szyfrowane połączenia i podstawia własny certyfikat.
  • (56) i (97) – protokół nie pasuje do portu lub login odrzucono. Kodem 56 curl kończy działanie, gdy żądanie HTTP idzie na port 824 (SOCKS5), gdy adres proxy zaczyna się od https:// zamiast http:// i gdy brama odpowiedziała 407. Błędny login na SOCKS5 daje kod 97 z tekstem User was rejected by the SOCKS5 server.

Jak to naprawić

  1. Uruchom polecenie ponownie z opcją -v i znajdź ostatnią prawidłową linię. Omówienie wyjścia krok po kroku – na stronie „Proxy nie działa: sprawdzenie”.
  2. Przy (5) sprawdź host: nslookup gw.prokso.com powinien zwrócić adresy. Jeśli nie zwraca, problem leży w DNS Twojej sieci lub w literówce.
  3. Przy (7) i (28) sprawdź port: 823 to HTTP, 824 to SOCKS5, 10000–20000 to stały IP. Jeśli port jest dobry, spróbuj innej sieci, na przykład internetu mobilnego. O długich żądaniach – na stronie timeout proxy.
  4. Przy (35) tymczasowo wyłącz skanowanie HTTPS w antywirusie lub spróbuj z sieci bez przechwytywania ruchu. Więcej – błędy certyfikatu SSL.
  5. Przy (56) i (97) dopasuj schemat do portu: http:// (nie https://) dla HTTP, socks5h:// dla 824 lub stałych portów w trybie SOCKS5. Login i hasło skopiuj z panelu klienta jeszcze raz; składnia parametrów jest w opisie bramy.

Jak sprawdzić, czy działa

Wykonaj curl -x http://LOGIN:HASŁO@gw.prokso.com:10000 https://prokso.com/ip. Jeśli przyszedł JSON z IP i krajem, proxy działa, a kod wyjścia wynosi 0. Kod ostatniego polecenia pokazuje echo $? w Linuksie i macOS lub $LASTEXITCODE w PowerShell. Przykłady do różnych zadań – w instrukcji curl.

Diagnoza w 2 minuty

Najpierw wklej linię do sprawdzania proxy. Jeśli tam proxy działa, przyczyna leży w programie lub jego ustawieniach. Jeśli nie - sprawdź linię z terminala:

curl -v -x "http://LOGIN:HASŁO@gw.prokso.com:823" https://api.ipify.org
  • Wiersz < HTTP/1.1 407 zaraz po CONNECT oznacza, że odpowiada proxy. Nazwa po kodzie, na przykład NO_USER, wskazuje przyczynę.
  • Proxy odpowiedziało na CONNECT kodem 200, a potem przyszedł inny kod - proxy działa, tę odpowiedź dała strona.
  • Brak odpowiedzi, tylko przekroczony czas - połączenie nie dotarło do proxy: sprawdź host, port i sieć.

Instrukcje, w których pojawia się ten błąd

Pytania i odpowiedzi (FAQ)

Czym kod (5) różni się od (6)?

Kod 6 (CURLE_COULDNT_RESOLVE_HOST) oznacza, że nie udało się ustalić adresu samej strony, a 5 – adresu proxy. Przy proxy kod 6 pojawia się, gdy curl sam szuka adresu strony, na przykład ze schematem socks5:// zamiast socks5h://, albo gdy proxy w ogóle nie zostało użyte.

Co, jeśli brama odpowiedziała 407?

Sam curl kończy wtedy działanie kodem (56), a przyczynę widać tylko z opcją -v, na przykład 407 NO_USER lub 407 TRAFFIC_EXHAUSTED. Przyczyny omawia strona <a href="/pl/errors/407-proxy-authentication-required">407 Proxy Authentication Required</a>.

Jak poznać dokładniejszą przyczynę?

Opcja -v pokazuje każdy etap, a tekst po numerze w linii curl: (N) doprecyzowuje błąd. Dla kodu 97 libcurl osobno przekazuje szczegóły uzgadniania z proxy.

Jak sprawdzić proxy bez terminala?

Wklej linię do <a href="/pl/tools/proxy-checker">sprawdzania proxy</a>: pokaże, czy proxy działa, protokół, zewnętrzny IP i kraj.

Rezydencjalne $1.59, mobilne $2.50, serwerowe $0.65 za 1 GB

Rejestracja w minutę, dostęp od razu po płatności.

Utwórz konto