Zadržite sajt u curl_init(), a posrednika postavite na taj handle. PHP treba svoju cURL ekstenziju; ispravan terminalski curl program ne dokazuje da je ekstenzija dostupna.

<?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;

Zamenite dokumentacijski IP i port svojim HTTP proxyjem ili unosom iz liste HTTP proxyja. CURLOPT_NOPROXY uklanja pravila zaobilaženja za ovaj test; CURLOPT_RETURNTRANSFER vraća telo umesto da ga šalje pregledaču. Ograničenje povezivanja obuhvata uspostavu, a ukupni vremenski limit ograničava cURL operaciju.

Za SOCKS5 krajnju tačku zamenite HTTP proxy opcije pre curl_exec():

curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

CURLPROXY_SOCKS5_HOSTNAME prepušta DNS odredišta SOCKS serveru. Koristite navedeni protokol; sam port 1080 ga ne određuje. Nijedan izbor proxyja ne zahteva isključivanje provere sertifikata sajta.

Strogo proveravajte $body === false. Prazno telo može biti uspešan prenos, dok se greška tunela može javiti pre bilo kakvog odgovora sajta. Obrnuto, neprazno telo može pratiti 403, 404 ili 429. Čitajte CURLINFO_RESPONSE_CODE uz cURL rezultat greške da biste utvrdili služi li završeni zahtev vašem zadatku.

Povezani članci