Använd en proxy-IP med PHP cURL
Ställ in en HTTP- eller SOCKS-proxy på ett PHP cURL-handtag, håll webbplatsens URL separat och skilj transportfel från HTTP-svar.
Behåll webbplatsen i curl_init() och ställ in mellanhanden på det handtaget. PHP behöver sitt cURL-tillägg; ett fungerande curl-program i terminalen bevisar inte att tillägget finns tillgängligt.
<?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;Ersätt dokumentations-IP och port med din HTTP-proxy eller en post från listan med HTTP-proxyer. CURLOPT_NOPROXY rensar undantagsregler för detta test; CURLOPT_RETURNTRANSFER returnerar innehållet i stället för att skicka det till webbläsaren. Anslutningsgränsen begränsar etableringen och den totala tidsgränsen begränsar cURL-operationen.
För en SOCKS5-ändpunkt, ersätt HTTP-proxyalternativen före curl_exec():
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);CURLPROXY_SOCKS5_HOSTNAME överlåter destinationens DNS till SOCKS-servern. Använd det angivna protokollet; port 1080 ensam identifierar det inte. Inget av proxyvalen kräver att webbplatsens certifikatverifiering stängs av.
Testa $body === false strikt. Tomt innehåll kan vara en lyckad överföring, medan ett tunnelfel kan uppstå innan något svar från webbplatsen finns. Omvänt kan icke-tomt innehåll följa med 403, 404 eller 429. Läs CURLINFO_RESPONSE_CODE tillsammans med cURLs felresultat för att avgöra om den avslutade begäran fyller din uppgift.