Налаштування проксі в Guzzle (PHP)

Проксі в Guzzle для PHP: опція proxy в клієнті або запиті, логін і пароль в адресі, SOCKS5 через socks5h і фіксований порт для однієї IP.

Оновлено · Редакція Prokso

Дані для підключення
Хост
gw.prokso.com
Порт
823 HTTP · 824 SOCKS5 — новий IP на кожен запит · 10000–20000 фіксований IP (sticky-сесія), HTTP(S) і SOCKS5
Логін і пароль
у кабінеті, на сторінці плану

Готові рядки у потрібному форматі генерує кабінет: оберіть країну, тип IP і протокол.

Коротко
  • Хост — gw.prokso.com, порти 823 (HTTP), 824 (SOCKS5), 10000–20000 (фіксований IP, HTTP або SOCKS5)
  • Логін і пароль — у кабінеті на сторінці плану
  • Перевіряйте IP у відповіді самого запиту через проксі: сторінка «Мій IP» у браузері ваш скрипт не перевіряє
Проксі в Guzzle: коротка відеоінструкція · 0:31

Покрокова інструкція, як підключити проксі Prokso в Guzzle (PHP). Займе кілька хвилин.

Крок 1. Візьміть дані проксі в особистому кабінеті

Відкрийте план і скопіюйте хост gw.prokso.com, порт, логін і пароль. Порт 823 — HTTP, 824 — SOCKS5 (обидва дають новий IP на кожен запит); порти 10000–20000 — фіксований IP (sticky-сесія) до 120 хвилин, працюють і як HTTP, і як SOCKS5 (кожен порт — окрема адреса). Країну задають у логіні: логін__cr.ua.

Блок «Доступ» на сторінці плану: хост, порти, логін і пароль для рядка проксі
Блок «Доступ» на сторінці плану: хост, порти, логін і пароль для рядка проксі

Крок 2. Встановіть Guzzle

У теці проєкту виконайте composer require guzzlehttp/guzzle.

Крок 3. Задайте проксі в налаштуваннях клієнта

Опція proxy приймає адресу проксі з логіном і паролем. Задана в конструкторі клієнта, вона діє для всіх його запитів; її можна передати й в окремий запит.

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

$client = new GuzzleHttp\Client([
    'proxy' => 'http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823',
    'timeout' => 30,
]);

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

Крок 4. SOCKS5 та окремі проксі за протоколом

Для SOCKS5 замініть адресу на socks5h://ЛОГІН:ПАРОЛЬ@gw.prokso.com:824 — літера h означає, що й DNS-запити підуть через проксі. Опція proxy також приймає масив із ключами http, https і no, якщо для частини адрес проксі не потрібен.

Крок 5. Перевірте вивід

Запустіть приклад: скрипт звертається до https://api.ipify.org і друкує IP, який бачить сайт. Це має бути адреса проксі, а не ваша. Помилка 407 означає неправильний логін або пароль. Сторінка «Мій IP» у браузері тут не допоможе: браузер іде напряму.

Приклад запуску: у виводі — IP проксі, а не ваш. На порту 823 кожен запуск дає нову адресу
Приклад запуску: у виводі — IP проксі, а не ваш. На порту 823 кожен запуск дає нову адресу

Тайм-аути й обробка помилок

Задайте обидві межі: connect_timeout — на з'єднання з проксі, timeout — на весь запит. За замовчуванням Guzzle чекає без обмеження. Опція http_errors зі значенням false дає змогу самостійно розбирати коди відповіді замість винятків:

<?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();

Код 407 означає, що проксі не прийняв логін або пароль чи на плані закінчився трафік. Коди 403 і 429 надходять від сайту. Розшифрування — на сторінці коди помилок проксі.

Багато запитів одночасно

Для паралельного завантаження використовуйте GuzzleHttp\Pool з опцією concurrency: вона обмежує кількість одночасних запитів. Почніть із 10 і підвищуйте, доки сайт відповідає без помилок 429. На порту 823 кожен запит піде з нового IP.

Спецсимволи в логіні й паролі

Адреса проксі — це URL, тому символи @, : і # у паролі ламають її розбір. Пропустіть логін і пароль через rawurlencode(), перш ніж збирати рядок. Країна задається в логіні, наприклад USERNAME__cr.de, — кодувати потрібно вже готовий логін цілком.

Питання й відповіді

Як тримати один IP для кількох запитів?

Замініть порт 823 на фіксований порт із діапазону 10000–20000: усі запити через нього йтимуть з однієї адреси до 120 хвилин.

Отримую помилку cURL про проксі. Що перевірити?

Перевірте відповідність протоколу й порту: 823 — лише HTTP, 824 — лише SOCKS5, порти 10000–20000 приймають обидва. Код 407 означає неправильний логін або пароль.

Чи потрібне розширення cURL для PHP?

Бажано. З ним Guzzle працює швидше й підтримує SOCKS5. Без нього використовується потоковий обробник PHP, який має менше можливостей.

Як задати проксі в Laravel?

HTTP-клієнт Laravel побудовано на Guzzle: передайте ті самі опції через <code>Http::withOptions(['proxy' => ...])</code>.

Чи можна частину адрес пустити повз проксі?

Так. Передайте <code>proxy</code> масивом і перелічіть винятки в ключі <code>no</code>.