Pozostaw stronę w curl_init(), a pośrednika ustaw na tym uchwycie. PHP wymaga rozszerzenia cURL; działający program curl w terminalu nie dowodzi dostępności rozszerzenia.

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

Zastąp dokumentacyjny IP i port własnym proxy HTTP lub wpisem z listy proxy HTTP. CURLOPT_NOPROXY usuwa reguły pomijania na potrzeby tego testu; CURLOPT_RETURNTRANSFER zwraca treść zamiast wysyłać ją do przeglądarki. Limit połączenia ogranicza nawiązywanie, a ogólny limit czasu całą operację cURL.

Dla punktu SOCKS5 zastąp opcje proxy HTTP przed curl_exec():

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

CURLPROXY_SOCKS5_HOSTNAME przekazuje DNS celu serwerowi SOCKS. Używaj wskazanego protokołu; sam port 1080 go nie identyfikuje. Żaden wariant proxy nie wymaga wyłączenia weryfikacji certyfikatu strony.

Sprawdzaj $body === false ściśle. Pusta treść może oznaczać udany transfer, natomiast tunel może zawieść, zanim pojawi się jakakolwiek odpowiedź strony. Z kolei niepusta treść może towarzyszyć 403, 404 lub 429. Odczytuj CURLINFO_RESPONSE_CODE wraz z wynikiem błędu cURL, aby ustalić, czy ukończone żądanie spełnia zadanie.

Powiązane artykuły