Задать IP прокси для запроса Guzzle
Используйте параметр proxy отдельного запроса Guzzle и учитывайте зависимость тайм-аута подключения от обработчика и явный список обхода.
Параметр 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. Пустой список удобен для изолированного теста прокси. Если в приложении предусмотрены правила обхода, сохраняйте их явно.