Параметр 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. Порожній список зручний для ізольованого тесту проксі. Якщо програма має навмисні правила обходу, зберігайте їх явно.

Схожі статті