Błędy https-proxy-agent i socks-proxy-agent

Oba agenty przyjmują proxy jako jedną linię-adres. Większość błędów powstaje właśnie tu: linia się nie parsuje, hasło psuje adres albo schemat jest zły.

Zaktualizowano · Redakcja Prokso

W skrócie
  • Oba agenty parsują linię proxy jako URL, dlatego potrzebny jest pełny adres ze schematem
  • Znaki specjalne w loginie i haśle koduj przez encodeURIComponent, inaczej adres się psuje albo zmienia się host
  • Dla SOCKS5 używaj socks5h://, aby nazwę strony na IP zamieniało proxy

Co oznacza błąd

Pakiety https-proxy-agent i socks-proxy-agent parsują linię proxy standardową klasą URL. Jeśli linia nie jest poprawnym adresem, Node.js rzuca TypeError: Invalid URL z kodem ERR_INVALID_URL. Dzieje się tak na przykład wtedy, gdy w haśle jest znak / albo port jest większy niż 65535.

Groźniej jest, gdy błędu nie ma. Znaki @ i # w haśle nie psują parsowania, ale zmieniają adres: w naszym teście linia z hasłem p@ss#1 zamieniła się w host ss. Program łączy się z nieistniejącym hostem i pada dopiero z ENOTFOUND.

Oba agenty dekodują login i hasło funkcją decodeURIComponent. Dlatego znaki specjalne trzeba zakodować przed wstawieniem do linii, a agent sam przywróci ich pierwotną postać. W socks-proxy-agent schemat decyduje też, kto zamienia nazwę strony na IP: przy socks5 robi to Twój komputer, przy socks5h – proxy.

Przyczyny

  • Linia bez schematu. Format host:port:login:hasło nie jest adresem URL. socks-proxy-agent odpowiada wtedy TypeError „A "socks" protocol must be specified!”.
  • Niezakodowane znaki specjalne w haśle. Znaki / ? # @ : % i spacja psują adres albo po cichu zmieniają host.
  • Nieprawidłowy login lub hasło. Bramka HTTP odpowiada „HTTP/1.1 407 NO_USER”, a biblioteka socks na porcie 824 – „Socks5 Authentication failed”.
  • Schemat nie pasuje do portu. http:// jest potrzebny dla portu 823, socks5h:// – dla portu 824; porty 10000–20000 przyjmują oba protokoły.
  • socks5 zamiast socks5h. Adres strony ustala Twój DNS, a nie proxy, więc strona może otworzyć się z IP dobranego pod Twoją sieć, a nie pod kraj proxy.

Jak to naprawić

  1. Pisz pełną linię ze schematem: http://LOGIN:HASŁO@gw.prokso.com:823 dla https-proxy-agent i socks5h://LOGIN:HASŁO@gw.prokso.com:824 dla socks-proxy-agent.
  2. Składaj linię z kodowaniem: `http://${encodeURIComponent(login)}:${encodeURIComponent(password)}@gw.prokso.com:823`. Wtedy żaden znak hasła nie zepsuje adresu.
  3. Przy 407 skopiuj login i hasło z panelu klienta jeszcze raz, bez spacji. Parametry w loginie (kraj, miasto, sesja) sprawdź na stronie login, porty i parametry. Więcej o samym kodzie – na stronie błędu 407.
  4. Jeśli nie chcesz wstawiać hasła do linii, włącz w panelu dostęp po IP (do 5 adresów na plan) i łącz się bez loginu.
  5. Dla SOCKS5 zawsze używaj socks5h://. Co zrobić, gdy serwer SOCKS odpowiada ogólnym błędem – na stronie SOCKS5 general failure.

Jak sprawdzić, czy działa

Przed uruchomieniem wypisz new URL(linia).hostname: powinno tam być gw.prokso.com. Potem sprawdź linię w sprawdzaniu proxy i wyślij przez agenta żądanie na https://prokso.com/ip.

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 socks5 różni się od socks5h w socks-proxy-agent?

W kodzie źródłowym pakietu przy socks5 nazwę strony na IP zamienia Twój komputer, przy socks5h i samym socks – proxy. O samym protokole – w słowniczku: <a href="/pl/glossary/socks5">SOCKS5</a>.

Czy trzeba kodować login, a nie tylko hasło?

Tak, jeśli w loginie są znaki specjalne. Agenty dekodują obie części, więc encodeURIComponent dla loginu niczego nie zepsuje.

Jak podłączyć agenta w swoim kodzie?

Przekaż agenta w opcji agent modułów http i https albo w httpsAgent dla axios. Przykłady – w instrukcji <a href="/pl/guide/nodejs">Node.js</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