Сайтты 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 қате нәтижесімен бірге оқыңыз.

Қатысты мақалалар