Error: socket hang up w axios przez proxy

Połączenie zamknęło się, zanim przyszła odpowiedź. Przy pracy przez proxy przyczyną jest zwykle sposób, w jaki axios wysyła żądanie HTTPS, albo para „port – protokół”.

Zaktualizowano · Redakcja Prokso

W skrócie
  • socket hang up oznacza, że połączenie zamknęło się, zanim przyszła odpowiedź
  • Stare wersje axios wysyłały żądanie HTTPS do proxy bez tunelu CONNECT, a proxy zrywało połączenie
  • Pewne rozwiązanie to https-proxy-agent lub socks-proxy-agent z proxy: false i zgodną parą portu i protokołu

Co oznacza błąd

Według dokumentacji Node.js, gdy połączenie zamyka się przed otrzymaniem odpowiedzi, żądanie kończy się błędem Error: socket hang up z kodem ECONNRESET. W Node.js axios działa na modułach http i https, więc pokazuje ten sam błąd.

Przy pracy przez proxy liczy się to, jak klient wysyła żądanie na adres HTTPS. Poprawnie jest najpierw poprosić proxy o otwarcie tunelu metodą CONNECT, a dopiero w tunelu nawiązać TLS ze stroną. W zgłoszeniu axios #4531 (wersja 0.26.1) wbudowana opcja proxy wysyłała żądanie HTTPS do proxy bez CONNECT, proxy zrywało połączenie, a program dostawał socket hang up.

W changelogu axios 1.16.1 (maj 2026) zapisano poprawkę #10858, a README gałęzi 1.x opisuje nowe zachowanie: dla adresów https:// axios otwiera tunel CONNECT i szyfruje połączenie ze stroną od końca do końca. Dlatego w starych wersjach błąd zwykle usuwa zmiana sposobu podłączenia, a w nowych – sprawdzenie portu i protokołu.

Przyczyny

  • Stara wersja axios. Wbudowana opcja proxy nie otwiera tunelu CONNECT dla adresów HTTPS i proxy zamyka połączenie.
  • Protokół nie pasuje do portu. Port 823 przyjmuje HTTP, port 824 – SOCKS5. Żądania HTTP wysłanego na port 824 proxy nie rozumie i zrywa połączenie.
  • protocol: 'https' dla portu HTTP. Według README axios https w ustawieniach proxy podaje się tylko wtedy, gdy sam serwer proxy działa przez HTTPS. W przeciwnym razie uzgadnianie TLS trafia na zwykły port HTTP.
  • Agent i opcja proxy jednocześnie. Jeśli przekazano własnego agenta, a w systemie ustawiono http_proxy lub https_proxy, axios może dołożyć jeszcze proxy ze zmiennych środowiskowych.
  • Zerwanie po stronie strony lub urządzenia. Strona zamknęła połączenie albo stały IP się zmienił, bo urządzenie wyszło z sieci.

Jak to naprawić

  1. Sprawdź wersję poleceniem npm ls axios. Jeśli jest starsza niż 1.16.1, zaktualizuj axios albo podłącz proxy przez agenta, jak w następnym kroku.
  2. Dla proxy HTTP utwórz agenta new HttpsProxyAgent('http://LOGIN:HASŁO@gw.prokso.com:823') z pakietu https-proxy-agent, przekaż go jako httpsAgent i dodaj proxy: false. Według README axios zostawia wtedy tunel agentowi, a proxy: false wyłącza proxy ze zmiennych środowiskowych.
  3. Dla SOCKS5 użyj pakietu socks-proxy-agent: new SocksProxyAgent('socks5h://LOGIN:HASŁO@gw.prokso.com:824') przekaż jako httpAgent i jako httpsAgent, również z proxy: false.
  4. Jeśli zostawiasz wbudowaną opcję proxy, ustaw protocol: 'http', host gw.prokso.com i port 823 albo port z zakresu 10000–20000 dla stałego IP. Pełny przykład – w instrukcji Node.js.
  5. Jeśli błąd pojawia się rzadko i w trakcie pracy, dodaj ponowienie żądania z przerwą. Więcej o zerwanych połączeniach – na stronie ECONNRESET i ECONNREFUSED.

Jak sprawdzić, czy działa

Najpierw sprawdź samą linię w sprawdzaniu proxy. Potem wyślij z axios żądanie na https://prokso.com/ip: w odpowiedzi powinien być JSON z IP i krajem proxy, a nie Twój adres. Jeśli błąd zostaje, przejdź sprawdzanie krok po kroku.

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)

Dlaczego curl działa, a axios nie?

curl dla adresów HTTPS otwiera tunel CONNECT. Stara wersja axios z wbudowaną opcją proxy tego nie robiła, więc to samo proxy działa w curl i zrywa połączenie w axios.

Czy trzeba pisać proxy: false razem z agentem?

Tak, jeśli w systemie mogą być ustawione http_proxy lub https_proxy. README axios mówi, że własni agenci bez proxyEnv nadal przechodzą obsługę proxy ze zmiennych środowiskowych, a proxy: false ją wyłącza.

Czy opcja proxy w axios obsługuje SOCKS5?

W README opcja jest opisana dla proxy HTTP i HTTPS. Dla SOCKS5 podłącz socks-proxy-agent jako agenta.

Zamiast socket hang up przyszedł kod 407. Co to znaczy?

Proxy odebrało żądanie, ale nie przyjęło loginu lub hasła. Zobacz <a href="/pl/errors/407-proxy-authentication-required">błąd 407</a>.

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