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
- 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ć
- 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. - Dla proxy HTTP utwórz agenta
new HttpsProxyAgent('http://LOGIN:HASŁO@gw.prokso.com:823')z pakietu https-proxy-agent, przekaż go jakohttpsAgenti dodajproxy: false. Według README axios zostawia wtedy tunel agentowi, aproxy: falsewyłącza proxy ze zmiennych środowiskowych. - Dla SOCKS5 użyj pakietu socks-proxy-agent:
new SocksProxyAgent('socks5h://LOGIN:HASŁO@gw.prokso.com:824')przekaż jakohttpAgenti jakohttpsAgent, również zproxy: false. - 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. - 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 407zaraz poCONNECToznacza, że odpowiada proxy. Nazwa po kodzie, na przykładNO_USER, wskazuje przyczynę. - Proxy odpowiedziało na
CONNECTkodem 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>.
Inne błędy proxy
Rezydencjalne $1.59, mobilne $2.50, serwerowe $0.65 za 1 GB
Rejestracja w minutę, dostęp od razu po płatności.