Brug en proxy-IP med PHP cURL
Indstil en HTTP- eller SOCKS-proxy på et PHP cURL-handle, hold webstedets URL adskilt, og skeln transportfejl fra HTTP-svar.
Behold webstedet i curl_init(), og indstil mellemleddet på det handle. PHP kræver sin cURL-udvidelse; et fungerende curl-program i terminalen beviser ikke, at udvidelsen er tilgængelig.
<?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;Erstat dokumentations-IP og -port med din HTTP-proxy eller en post fra listen over HTTP-proxyer. CURLOPT_NOPROXY rydder omgåelsesregler til denne test; CURLOPT_RETURNTRANSFER returnerer indholdet i stedet for at sende det til browseren. Forbindelsesgrænsen begrænser oprettelsen, og det samlede tidsloft begrænser cURL-operationen.
For et SOCKS5-endepunkt skal du erstatte HTTP-proxyindstillingerne før curl_exec():
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);CURLPROXY_SOCKS5_HOSTNAME overlader destinationens DNS til SOCKS-serveren. Brug den angivne protokol; port 1080 alene identificerer den ikke. Ingen af proxyvalgene kræver deaktivering af webstedets certifikatkontrol.
Test $body === false strengt. Tomt indhold kan være en vellykket overførsel, mens en tunnel kan fejle, før der findes noget svar fra webstedet. Omvendt kan ikke-tomt indhold ledsage 403, 404 eller 429. Læs CURLINFO_RESPONSE_CODE sammen med cURLs fejlresultat for at afgøre, om den afsluttede forespørgsel opfylder din opgave.