Proxy z loginem w Puppeteer i Playwright: jak przekazać i co znaczą błędy

Obie biblioteki sterują przeglądarką, a Chromium nie bierze loginu i hasła z adresu proxy. Dlatego dane logowania przekazuje się osobno, a każda biblioteka robi to po swojemu.

Zaktualizowano · Redakcja Prokso

W skrócie
  • Flaga --proxy-server nie przyjmuje loginu i hasła: Chromium odrzuca taki adres
  • W Puppeteer login przekazuje page.authenticate(), w Playwright – pola username i password w opcji proxy
  • SOCKS5 z loginem w Chromium nie działa: używaj portu HTTP 823 lub dostępu po IP

Co oznacza błąd

Flaga --proxy-server przyjmuje tylko schemat, host i port. Kod źródłowy Chromium odrzuca adres proxy z loginem i hasłem, więc linia http://LOGIN:HASŁO@gw.prokso.com:823 kończy się błędem net::ERR_NO_SUPPORTED_PROXIES.

W Puppeteer dane logowania przekazuje metoda page.authenticate({username, password}). Według dokumentacji dostarcza ona dane do uwierzytelniania HTTP i w tym celu w tle włącza przechwytywanie żądań, co może wpłynąć na wydajność. Metoda należy do strony, więc wywołuj ją dla każdej nowej strony przed page.goto().

W Playwright proxy ustawia się opcją proxy: {server, username, password}. Dokumentacja podaje, że obsługiwane są HTTP(S) i SOCKSv5, proxy można ustawić dla całej przeglądarki albo dla osobnego kontekstu, a login i hasło opisano tylko dla proxy HTTP(S). Krótki zapis gw.prokso.com:823 jest traktowany jako proxy HTTP.

Przyczyny

  • Login w --proxy-server. Chromium odrzuca taki adres i przeglądarka zostaje bez proxy: net::ERR_NO_SUPPORTED_PROXIES.
  • Brak lub złe dane logowania. Kod -338 net::ERR_INVALID_AUTH_CREDENTIALS w Chromium oznacza, że nie udało się ustalić danych logowania podczas uwierzytelniania HTTP. Sprawdź, czy uwierzytelnianie jest wywołane i czy login oraz hasło są poprawne; o samym kodzie – na stronie 407.
  • Przeglądarka nie dotarła do proxy. Kod -130 net::ERR_PROXY_CONNECTION_FAILED oznacza, że nie udało się utworzyć połączenia z serwerem proxy: błąd w rozwiązywaniu nazwy hosta lub w połączeniu gniazda. W Firefoksie pod Playwright odpowiednikiem jest NS_ERROR_PROXY_CONNECTION_REFUSED: próba połączenia z proxy się nie udała.
  • SOCKS5 z loginem w Chromium. Chromium nie obsługuje uwierzytelniania dla SOCKSv5, więc page.authenticate() tu nie pomoże: uzgadnianie zakończy się błędem SOCKS.
  • Tunel się nie otworzył. Jeśli połączenie z proxy jest, ale CONNECT do strony się nie udał, pojawi się ERR_TUNNEL_CONNECTION_FAILED.

Jak to naprawić

  1. Puppeteer: uruchamiaj z --proxy-server=http://gw.prokso.com:823, a potem wywołaj await page.authenticate({username: 'LOGIN', password: 'HASŁO'}) przed przejściem na stronę. Pełny przykład – w instrukcji Puppeteer.
  2. Playwright: przekaż proxy: {server: 'http://gw.prokso.com:823', username: 'LOGIN', password: 'HASŁO'} do launch(). Szczegóły – w instrukcji Playwright.
  3. Dla SOCKS5 w Chromium włącz dostęp po IP (do 5 adresów w panelu klienta) i używaj socks5://gw.prokso.com:824 bez loginu albo przejdź na port HTTP 823 z loginem.
  4. Potrzebujesz jednego IP na cały scenariusz – bierz port z zakresu 10000–20000: trzyma stały IP przez czas trwania sesji (1–120 min, domyślnie 30). Więcej – sesja sticky.
  5. Jeśli widzisz ERR_PROXY_CONNECTION_FAILED, sprawdź host gw.prokso.com, port i sieć według strony błędu połączenia z proxy.

Jak sprawdzić, czy działa

Po uruchomieniu otwórz https://prokso.com/ip na tej samej stronie i przeczytaj JSON: pola ip, country i org powinny należeć do proxy, a nie do Twojego połączenia. To samo widać na stronie sprawdzania 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)

Czy można ustawić różne proxy dla różnych kart?

Flaga --proxy-server ustawia proxy dla całej przeglądarki. W Playwright dokumentacja pozwala ustawić proxy także dla osobnego kontekstu, więc różne konteksty mogą iść przez różne porty.

Dlaczego page.authenticate() nie działa z SOCKS5?

Metoda odpowiada na żądanie uwierzytelniania HTTP. Chromium nie obsługuje uwierzytelniania dla SOCKSv5, więc prośby o logowanie po prostu nie będzie. Używaj portu HTTP lub dostępu po IP.

Skąd wziąć login i hasło?

Skopiuj linię proxy w panelu klienta na stronie planu. Jak zbudowany jest login i jakie parametry się do niego dodaje – na stronie <a href="/pl/help/gateway">bramy</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