Jak skonfigurować proxy w Guzzle (PHP)

Proxy w Guzzle dla PHP: opcja proxy w kliencie lub żądaniu, login i hasło w URL, SOCKS5 przez socks5h i port ze stałym IP dla jednego adresu.

Zaktualizowano · Redakcja Prokso

Dane do połączenia
Host
gw.prokso.com
Port
823 HTTP · 824 SOCKS5 — nowy IP przy każdym żądaniu · 10000–20000 stały IP na całą sesję, HTTP(S) i SOCKS5
Login i hasło
w panelu klienta, na stronie planu

Gotowe wiersze w potrzebnym formacie wygenerujesz w panelu klienta: wybierz kraj, typ IP i protokół.

W skrócie
  • Host gw.prokso.com, porty 823 (HTTP), 824 (SOCKS5), 10000–20000 (stały IP, HTTP lub SOCKS5)
  • Login i hasło znajdziesz w panelu klienta na stronie planu
  • Sprawdzaj IP w odpowiedzi na samo żądanie wysłane przez proxy: strona Mój IP w przeglądarce nie testuje Twojego skryptu

Instrukcja krok po kroku, jak podłączyć proxy Prokso w Guzzle (PHP). Zajmie to kilka minut.

Krok 1. Pobierz dane proxy z panelu klienta

Otwórz swój plan i skopiuj host gw.prokso.com, port, login i hasło. Port 823 to HTTP, a 824 to SOCKS5 (oba dają nowy IP przy każdym żądaniu); porty 10000–20000 utrzymują jeden IP przez całą sesję do 120 minut i działają zarówno jako HTTP, jak i SOCKS5 (każdy port to osobny adres). Kraj ustawiasz w loginie: username__cr.ua.

Blok „Dostęp” na stronie planu: host, porty, login i hasło do linii proxy
Blok „Dostęp” na stronie planu: host, porty, login i hasło do linii proxy

Krok 2. Zainstaluj Guzzle

W folderze projektu uruchom composer require guzzlehttp/guzzle.

Krok 3. Ustaw proxy w opcjach klienta

Opcja proxy przyjmuje URL proxy z loginem i hasłem. Ustawiona w konstruktorze klienta działa dla wszystkich jego żądań; możesz ją też przekazać do pojedynczego żądania.

<?php
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client([
    'proxy' => 'http://USERNAME:PASSWORD@gw.prokso.com:823',
    'timeout' => 30,
]);

echo $client->get('https://api.ipify.org?format=json')->getBody();

Krok 4. SOCKS5 i proxy dla poszczególnych protokołów

Dla SOCKS5 zmień URL na socks5h://USERNAME:PASSWORD@gw.prokso.com:824 – litera h oznacza, że zapytania DNS też idą przez proxy. Opcja proxy przyjmuje też tablicę z kluczami http, https i no, jeśli niektóre adresy mają omijać proxy.

Krok 5. Sprawdź wynik

Uruchom przykład: skrypt wywołuje https://api.ipify.org i wypisuje IP, który widzi strona. Powinien to być adres proxy, a nie Twój. Błąd 407 oznacza nieprawidłowy login lub hasło. Strona Mój IP w przeglądarce nic tu nie pokaże, bo przeglądarka łączy się bezpośrednio.

Przykład uruchomienia: w wyniku widać IP proxy, a nie Twoje. Na porcie 823 każde uruchomienie daje nowy adres
Przykład uruchomienia: w wyniku widać IP proxy, a nie Twoje. Na porcie 823 każde uruchomienie daje nowy adres

Limity czasu i obsługa błędów

Ustaw oba limity: connect_timeout na połączenie z proxy i timeout na całe żądanie. Domyślnie Guzzle czeka bez ograniczeń. Opcja http_errors ustawiona na false pozwala samodzielnie obsługiwać kody odpowiedzi zamiast dostawać wyjątki:

<?php
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client([
    'proxy' => 'http://USERNAME:PASSWORD@gw.prokso.com:823',
    'connect_timeout' => 10,
    'timeout' => 30,
    'http_errors' => false,   // handle status codes yourself
]);

$res = $client->get('https://prokso.com/ip');
echo $res->getStatusCode(), ' ', $res->getBody();

Kod 407 oznacza, że proxy nie przyjęło loginu lub hasła albo że w planie skończył się transfer. Kody 403 i 429 pochodzą od strony. Wyjaśniamy je na stronie kody błędów proxy.

Wiele żądań naraz

Do równoległego pobierania użyj GuzzleHttp\Pool z opcją concurrency: ogranicza ona liczbę jednoczesnych żądań. Zacznij od 10 i zwiększaj, dopóki strona odpowiada bez błędów 429. Na porcie 823 każde żądanie wychodzi z nowego IP.

Znaki specjalne w loginie i haśle

Adres proxy to URL, więc znaki @, : i # w haśle psują jego parsowanie. Przepuść login i hasło przez rawurlencode(), zanim zbudujesz ciąg. Kraj ustawiasz w loginie, np. USERNAME__cr.de, więc kodować trzeba pełny, gotowy login.

Jeśli proxy nie działa

Pytania i odpowiedzi (FAQ)

Jak zachować jeden IP dla kilku żądań?

Zamień port 823 na port ze stałym IP z zakresu 10000–20000: wszystkie żądania przez niego wyjdą z jednego adresu przez maksymalnie 120 minut.

Dostaję błąd proxy cURL. Co sprawdzić?

Sprawdź, czy protokół pasuje do portu: 823 to tylko HTTP, 824 – tylko SOCKS5, a porty 10000–20000 przyjmują oba. Kod 407 oznacza nieprawidłowy login lub hasło.

Czy potrzebuję rozszerzenia cURL dla PHP?

Zalecamy je. Z nim Guzzle działa szybciej i obsługuje SOCKS5. Bez niego używany jest handler strumieni PHP, który ma mniej możliwości.

Jak ustawić proxy w Laravel?

Klient HTTP w Laravel jest zbudowany na Guzzle: przekaż te same opcje przez Http::withOptions(['proxy' => ...]).

Czy mogę puścić niektóre adresy z pominięciem proxy?

Tak. Przekaż proxy jako tablicę i wypisz wyjątki pod kluczem no.