Bruk ein proxy-IP med PHP cURL
Set ein HTTP- eller SOCKS-proxy på eit PHP cURL-handtak, hald nettstad-URL-en separat og skil transportfeil frå HTTP-svar.
Hald nettstaden i curl_init() og set mellomleddet på det handtaket. PHP treng cURL-utvidinga si; eit fungerande curl-program i terminalen provar ikkje at utvidinga er tilgjengeleg.
<?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 ei oppføring frå lista over HTTP-proxyar. CURLOPT_NOPROXY tømmer omgåingsreglar for denne testen; CURLOPT_RETURNTRANSFER returnerer innhaldet i staden for å sende det til nettlesaren. Tilkoplingsgrensa avgrensar oppsettet, og den samla tidsgrensa avgrensar cURL-operasjonen.
For eit SOCKS5-endepunkt, erstatt HTTP-proxyvala 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 overlet DNS for målet til SOCKS-tenaren. Bruk den oppgjevne protokollen; port 1080 åleine identifiserer han ikkje. Ingen av proxyvala krev å deaktivere sertifikatkontrollen til nettstaden.
Test $body === false strengt. Tomt innhald kan vere ei vellukka overføring, medan ein tunnel kan feile før noko svar frå nettstaden finst. Omvendt kan ikkje-tomt innhald følgje med 403, 404 eller 429. Les CURLINFO_RESPONSE_CODE saman med feilresultatet frå cURL for å avgjere om den avslutta førespurnaden fyller oppgåva di.