Bruk en proxy-IP med PHP cURL
Sett en HTTP- eller SOCKS-proxy på et PHP cURL-håndtak, hold nettstedets URL separat og skill transportfeil fra HTTP-svar.
Behold nettstedet i curl_init() og sett mellomleddet på det håndtaket. PHP trenger cURL-utvidelsen sin; et fungerende curl-program i terminalen beviser ikke at utvidelsen er tilgjengelig.
<?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;Erstatt dokumentasjons-IP og port med din HTTP-proxy eller en oppføring fra listen over HTTP-proxyer. CURLOPT_NOPROXY tømmer omgåelsesregler for denne testen; CURLOPT_RETURNTRANSFER returnerer innholdet i stedet for å sende det til nettleseren. Tilkoblingsgrensen avgrenser oppsettet, og den samlede tidsgrensen begrenser cURL-operasjonen.
For et SOCKS5-endepunkt, erstatt HTTP-proxyvalgene 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 overlater målets DNS til SOCKS-serveren. Bruk den oppgitte protokollen; port 1080 alene identifiserer den ikke. Ingen av proxyvalgene krever å deaktivere nettstedets sertifikatkontroll.
Test $body === false strengt. Tomt innhold kan være en vellykket overføring, mens en tunnel kan feile før noe svar fra nettstedet finnes. Omvendt kan ikke-tomt innhold følge med 403, 404 eller 429. Les CURLINFO_RESPONSE_CODE sammen med cURLs feilresultat for å avgjøre om den avsluttede forespørselen fyller oppgaven din.