Параметр proxy в Guzzle принимает полный URL конечной точки. Задайте его в запросе, если только эта операция должна использовать выбранный IP.

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

$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://example.com/', [
    'proxy' => 'http://203.0.113.10:8080',
    'connect_timeout' => 5,
    'timeout' => 15,
    'http_errors' => false,
]);

echo $response->getStatusCode(), PHP_EOL;
echo (string) $response->getBody();

Пример предполагает установку Guzzle 7 через Composer. Замените адрес для документации реальным HTTP-прокси поставщика или из списка HTTP-прокси. Адрес назначения оставьте в URL запроса: прокси — посредник, а не загружаемый ресурс.

Здесь http_errors равен false, чтобы HTTP-ответ с ошибкой оставался доступен для изучения. Сбои подключения по-прежнему вызывают исключения передачи. Поэтому HTTPS-туннель, отклонённый при установке, может завершиться ошибкой до получения обычного объекта ответа сайта.

Проверьте обработчик, если ограничения подключения ведут себя иначе

Guzzle может использовать разные HTTP-обработчики. Согласно документации, встроенный обработчик cURL поддерживает connect_timeout. Собственный обработчик или среда без PHP cURL не обязательно равнозначны. Прежде чем считать скопированный параметр тайм-аута действующим, проверьте обработчик приложения.

Общий timeout тоже стоит задать. Записи бесплатного списка могут перестать отвечать между проверками, а значение по умолчанию — непригодный срок для запроса, который должен быстро завершиться.

Использование карты прокси

Карта позволяет выбирать маршруты по схеме адреса назначения и явно указывать узлы для обхода прокси:

'proxy' => [
    'http' => 'http://203.0.113.10:8080',
    'https' => 'http://203.0.113.10:8080',
    'no' => [],
],

Используйте этот массив вместо строкового значения. Ключ HTTPS выбирает HTTPS-адресаты; его значение HTTP по-прежнему описывает слушатель прокси. Другой протокол слушателя требует другой настройки конечной точки.

Когда вы сами задаёте параметр proxy запроса, Guzzle ожидает от вас нужные значения no, а не копирует их автоматически из NO_PROXY. Пустой список удобен для изолированного теста прокси. Если в приложении предусмотрены правила обхода, сохраняйте их явно.

Похожие статьи