Задржете ја страницата во 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 за да одлучите дали завршеното барање ја исполнува вашата задача.

Поврзани статии