Houd de website in curl_init() en stel de tussenpartij in op dat handle. PHP heeft zijn cURL-extensie nodig; een werkend curl-programma in de terminal bewijst niet dat de extensie beschikbaar is.

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

Vervang de documentatie-IP en -poort door je HTTP-proxy of een vermelding uit de lijst met HTTP-proxy’s. CURLOPT_NOPROXY wist omzeilingsregels voor deze test; CURLOPT_RETURNTRANSFER geeft de inhoud terug in plaats van die naar de browser te sturen. De verbindingslimiet begrenst de opbouw en de totale time-out beperkt de cURL-bewerking.

Vervang voor een SOCKS5-eindpunt de HTTP-proxyopties vóór curl_exec():

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

CURLPROXY_SOCKS5_HOSTNAME delegeert de DNS van de bestemming aan de SOCKS-server. Gebruik het opgegeven protocol; poort 1080 alleen identificeert het niet. Geen van beide proxykeuzes vereist uitschakeling van de certificaatcontrole van de website.

Test $body === false strikt. Lege inhoud kan een geslaagde overdracht zijn, terwijl een tunnel kan mislukken voordat er enig websiteantwoord is. Omgekeerd kan niet-lege inhoud samengaan met 403, 404 of 429. Lees CURLINFO_RESPONSE_CODE naast de cURL-foutuitkomst om te bepalen of het voltooide verzoek je taak vervult.

Gerelateerde artikelen