Перейти до вмісту
Гайды 6 хв читання 35 переглядів

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

Цей посібник охоплює налаштування PHP проксі за допомогою cURL, Guzzle та file_get_contents. Ефективно інтегруйте проксі для ваших веб-проектів.

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

Налаштування PHP проксі для cURL, Guzzle та file_get_contents передбачає конфігурацію опцій HTTP-клієнта або контекстів потоку для маршрутизації вихідних запитів через вказаний проксі-сервер, зазвичай шляхом визначення хоста, порту та облікових даних для автентифікації проксі.

Використання проксі-сервера з PHP дозволяє додаткам маскувати свою вихідну IP-адресу, обходити геообмеження, отримувати доступ до ресурсів з внутрішніх мереж або керувати швидкістю запитів для веб-скрейпінгу та взаємодії з API. Вибір методу залежить від необхідного контролю, складності запитів та потреб обробки помилок.

Використання cURL

cURL — це надійна бібліотека для виконання HTTP-запитів, що пропонує широкий контроль над параметрами з'єднання, включаючи налаштування проксі. Це поширений вибір для складних веб-взаємодій, і вона зазвичай доступна як PHP-розширення (php-curl).

Базове налаштування проксі

Щоб маршрутизувати запит через HTTP або HTTPS проксі, використовуйте CURLOPT_PROXY та CURLOPT_PROXYPORT.

<?php
$ch = curl_init();

// Цільова URL
curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');

// Налаштування проксі
curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);

// Повернути передачу як рядок замість прямого виведення
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

SOCKS Проксі

cURL підтримує SOCKS проксі (SOCKS4, SOCKS4a, SOCKS5, SOCKS5h). Вкажіть тип проксі за допомогою CURLOPT_PROXYTYPE.

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Налаштування SOCKS5 проксі
curl_setopt($ch, CURLOPT_PROXY, 'socks5.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 1080);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // Або CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A, CURLPROXY_SOCKS5_HOSTNAME

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

Проксі з автентифікацією

Для проксі, що вимагають автентифікації, використовуйте CURLOPT_PROXYUSERPWD з рядком username:password.

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Налаштування проксі з автентифікацією
curl_setopt($ch, CURLOPT_PROXY, 'authproxy.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'proxyuser:proxypassword');

// Опціонально: Вказати метод автентифікації проксі (наприклад, CURLAUTH_BASIC, CURLAUTH_DIGEST)
// curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

HTTPS Проксі (CONNECT Тунелювання)

При підключенні до HTTPS-цілі через HTTP-проксі, cURL використовує метод HTTP CONNECT для встановлення тунелю. CURLOPT_HTTPPROXYTUNNEL може явно увімкнути це, хоча часто це обробляється автоматично.

<?php
$ch = curl_init();

// Цільова HTTPS URL
curl_setopt($ch, CURLOPT_URL, 'https://secure.example.com/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Налаштування проксі
curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com');
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);

// Увімкнути тунелювання для HTTPS через HTTP проксі (часто мається на увазі)
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

// Обробка перевірки SSL-сертифіката (вимкнути для тестування, увімкнути для продакшну)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

Загальні опції cURL для проксі

  • CURLOPT_TIMEOUT: Максимальний час у секундах для операції cURL.
  • CURLOPT_CONNECTTIMEOUT: Максимальний час у секундах для встановлення з'єднання.
  • CURLOPT_FOLLOWLOCATION: Слідувати будь-яким HTTP-заголовкам Location:.
  • CURLOPT_MAXREDIRS: Максимальна кількість перенаправлень, за якими потрібно слідувати.
  • CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST: Контроль перевірки SSL-сертифіката. Встановити true для продакшну.
  • CURLOPT_HEADER: Включити заголовок у вивід.

Використання Guzzle

Guzzle — це популярний PHP HTTP-клієнт, який надає вищий рівень абстракції над cURL, спрощуючи типові HTTP-завдання. Він вимагає встановлення через Composer.

Базове налаштування проксі

Клієнти та запити Guzzle приймають опцію proxy. Її можна визначити глобально для клієнта або для кожного запиту.

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

use GuzzleHttp\Client;

$client = new Client([
    // Базовий URI для всіх запитів, зроблених цим клієнтом
    'base_uri' => 'http://example.com/',
    // Глобальне налаштування проксі для клієнта
    'proxy' => 'http://proxy.example.com:8080',
]);

try {
    $response = $client->request('GET', 'api/data');
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

Проксі з автентифікацією

Включіть облікові дані для автентифікації безпосередньо в URI проксі для HTTP/HTTPS проксі.

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

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'http://example.com/',
    // Проксі з автентифікацією
    'proxy' => 'http://proxyuser:proxypassword@authproxy.example.com:8080',
]);

try {
    $response = $client->request('GET', 'api/data');
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

SOCKS Проксі

Вкажіть SOCKS проксі, використовуючи схему socks в URI проксі.

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

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'http://example.com/',
    // SOCKS5 проксі
    'proxy' => 'socks5://socks5.example.com:1080',
]);

try {
    $response = $client->request('GET', 'api/data');
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

Проксі для кожного запиту

Опція proxy може бути перевизначена або вказана для окремих запитів.

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

use GuzzleHttp\Client;

$client = new Client(); // Без глобального проксі

try {
    $response = $client->request('GET', 'http://example.com/api/data', [
        'proxy' => 'http://perrequestproxy.example.com:8080', // Проксі для цього конкретного запиту
    ]);
    echo $response->getBody();
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo 'Guzzle error: ' . $e->getMessage();
}
?>

Загальні опції Guzzle для проксі

  • proxy: Рядок URI проксі (http://, https://, socks4://, socks5://).
  • verify: Контролює перевірку SSL-сертифіката (true, false або шлях до CA-пакету).
  • timeout: Загальний час очікування для запиту в секундах.
  • connect_timeout: Час очікування для підключення до сервера в секундах.
  • allow_redirects: Контролює обробку перенаправлень (true, false або масив опцій).

Використання file_get_contents

file_get_contents — це проста функція для читання вмісту файлів, включаючи URL-адреси. Вона може використовувати контексти потоку для налаштування проксі, але пропонує менше контролю та обробки помилок порівняно з cURL або Guzzle. Вона підходить для базових HTTP/HTTPS запитів з простими вимогами до проксі.

Базове налаштування проксі

Використовуйте stream_context_create для визначення налаштувань проксі в опціях http.

<?php
$proxy = 'tcp://proxy.example.com:8080';
$url = 'http://example.com/api/data';

$context = stream_context_create([
    'http' => [
        'proxy' => $proxy,
        'request_fulluri' => true, // Важливо для HTTP проксі
    ],
]);

$response = @file_get_contents($url, false, $context);

if ($response === false) {
    echo 'Failed to retrieve content via proxy.';
} else {
    echo $response;
}
?>

request_fulluri має бути встановлено в true при використанні HTTP-проксі, оскільки це вказує клієнту надсилати повний URI в рядку запиту (наприклад, GET http://example.com/path HTTP/1.0).

HTTPS Проксі

Для HTTPS-цілей обгортка потоку https обробляє налаштування проксі аналогічно http.

<?php
$proxy = 'tcp://proxy.example.com:8080';
$url = 'https://secure.example.com/data';

$context = stream_context_create([
    'http' => [ // Примітка: Конфігурація проксі все ще знаходиться в 'http' для CONNECT тунелювання
        'proxy' => $proxy,
        'request_fulluri' => true,
    ],
    'ssl' => [ // Опції перевірки SSL/TLS
        'verify_peer' => false, // Вимкнути для тестування, увімкнути для продакшну
        'verify_peer_name' => false,
    ],
]);

$response = @file_get_contents($url, false, $context);

if ($response === false) {
    echo 'Failed to retrieve content via proxy.';
} else {
    echo $response;
}
?>

Проксі з автентифікацією

Автентифікація проксі для file_get_contents зазвичай обробляється шляхом ручного встановлення заголовка Proxy-Authorization в опціях контексту http.

<?php
$proxy = 'tcp://proxy.example.com:8080';
$url = 'http://example.com/api/data';
$proxyUser = 'proxyuser';
$proxyPass = 'proxypassword';

// Base64 кодування username:password для базової автентифікації
$authHeader = 'Proxy-Authorization: Basic ' . base64_encode("$proxyUser:$proxyPass");

$context = stream_context_create([
    'http' => [
        'proxy' => $proxy,
        'request_fulluri' => true,
        'header' => $authHeader,
    ],
]);

$response = @file_get_contents($url, false, $context);

if ($response === false) {
    echo 'Failed to retrieve content via proxy.';
} else {
    echo $response;
}
?>

Обмеження file_get_contents з проксі

  • Відсутність підтримки SOCKS проксі: Обгортки потоку PHP не підтримують SOCKS проксі нативно.
  • Обмежена обробка помилок: Інформація про помилки мінімальна, покладаючись на попередження або повернення false.
  • Менший контроль: Детальний контроль над заголовками запитів, таймаутами та обробкою перенаправлень менш гнучкий.
  • Продуктивність: Може бути менш продуктивним для одночасних або численних запитів порівняно з cURL.

Порівняння методів PHP проксі

Функція cURL (через php-curl) Guzzle (через Composer) file_get_contents (через контексти потоку)
Простота використання Помірна (пряме встановлення опцій) Висока (об'єктно-орієнтований, плавний інтерфейс) Висока (простий виклик функції, налаштування контексту)
Типи проксі HTTP, HTTPS (CONNECT), SOCKS4/4a/5/5h HTTP, HTTPS (CONNECT), SOCKS4/5 HTTP, HTTPS (CONNECT)
Автентифікація CURLOPT_PROXYUSERPWD Вбудований URI (user:pass@host) Ручний заголовок Proxy-Authorization
Обробка помилок Детальна (curl_errno, curl_error) Надійна (винятки, відповіді PSR-7) Базова (повернення false, попередження)
Рівень контролю Високий (детальний контроль над усіма опціями cURL) Високий (обгортає cURL, пропонує високорівневі опції) Низький (обмежений опціями контексту потоку)
SSL-перевірка CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST Опція verify Опції контексту ssl (verify_peer, verify_peer_name)
Обробка перенаправлень CURLOPT_FOLLOWLOCATION, CURLOPT_MAXREDIRS Опція allow_redirects Обмежена (автоматична для HTTP, менш конфігурована)
Залежності Розширення PHP cURL Розширення PHP cURL, Composer, пакет Guzzle Відсутні (вбудована функція PHP)
Найкращий варіант використання Складна, високопродуктивна, низькорівнева інтеграція Сучасні додатки, REST API, надійна обробка помилок Прості, швидкі скрипти для базових GET-запитів
Оновлено: 03.03.2026
Назад до категорії

Читайте також

Гайды 1 хв

Налаштування проксі в Cypress для E2E тестування

Налаштування проксі в Cypress: змінні HTTP_PROXY, cy-proxy-middleware та тестування геозалежного контенту.

Гайды 1 хв

Як автоматизувати купівлю проксі через API

Автоматизація купівлі та управління проксі через API провайдерів: інтеграція, моніторинг використання та автопоновлення.

Гайды 1 хв

Створення інформаційної панелі моніторингу проксі в Grafana

Покрокове створення інформаційної панелі для моніторингу проксі в Grafana: метрики,

Гайды 1 хв

Як тестувати проксі перед покупкою

Чек-лист тестування проксі перед покупкою: швидкість, стабільність, анонімність, гео та сумісність з ціллю

Гайды 1 хв

Як налаштувати липкі сесії через проксі

Липкі сесії: підтримка однієї IP-адреси протягом усієї сесії, налаштовуються через провайдера та самостійно.

Гайды 1 хв

Використання проксі з Camoufox

Camoufox — це модифікований Firefox для обходу антиботів. Налаштування проксі, відбиток та режим невидимості.

Спробуйте наші проксі

20,000+ проксі в 100+ країнах світу

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.