Використання IP проксі з PHP cURL
Налаштуйте HTTP- або SOCKS-проксі в дескрипторі PHP cURL, відокремте URL сайту й розрізняйте транспортні помилки та відповіді HTTP.
Залиште сайт у curl_init(), а посередника налаштуйте в цьому дескрипторі. PHP потребує розширення cURL; робоча програма curl у терміналі не доводить доступність розширення.
<?php
$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
CURLOPT_PROXY => 'http://203.0.113.10:8080',
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_NOPROXY => '',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL;
echo $body;Замініть документаційні IP та порт своїм HTTP-проксі або записом зі списку HTTP-проксі. CURLOPT_NOPROXY очищає правила обходу для цього тесту; CURLOPT_RETURNTRANSFER повертає тіло замість надсилання до браузера. Ліміт з’єднання обмежує встановлення, а загальний тайм-аут — операцію cURL.
Для кінцевої точки SOCKS5 замініть параметри HTTP-проксі перед curl_exec():
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);CURLPROXY_SOCKS5_HOSTNAME передає DNS призначення серверу SOCKS. Використовуйте вказаний протокол; сам порт 1080 його не визначає. Жоден варіант проксі не вимагає вимикати перевірку сертифіката сайту.
Перевіряйте $body === false строго. Порожнє тіло може означати успішне передавання, а збій тунелю може виникнути до появи будь-якої відповіді сайту. І навпаки, непорожнє тіло може супроводжувати 403, 404 чи 429. Читайте CURLINFO_RESPONSE_CODE разом із результатом помилки cURL, щоб вирішити, чи виконує завершений запит ваше завдання.