Een proxy-IP gebruiken met PHP cURL
Stel een HTTP- of SOCKS-proxy in op een PHP cURL-handle, houd de website-URL apart en onderscheid transportfouten van HTTP-antwoorden.
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.