Оставете сайта в curl_init() и задайте посредника върху този handle. 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, за да прецените дали завършената заявка служи на задачата ви.

Подобни статии