Usa un IP proxy con PHP cURL
Imposta un proxy HTTP o SOCKS su un handle PHP cURL, mantieni separato l’URL del sito e distingui errori di trasporto e risposte HTTP.
Mantieni il sito in curl_init() e imposta l’intermediario su quell’handle. PHP necessita dell’estensione cURL; un eseguibile curl funzionante nel terminale non dimostra che l’estensione sia disponibile.
<?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;Sostituisci IP e porta di documentazione con il tuo proxy HTTP o una voce della lista dei proxy HTTP. CURLOPT_NOPROXY cancella le regole di esclusione per questo test; CURLOPT_RETURNTRANSFER restituisce il corpo invece di inviarlo al browser. Il limite di connessione circoscrive l’avvio e il timeout globale limita l’operazione cURL.
Per un endpoint SOCKS5, sostituisci le opzioni del proxy HTTP prima di curl_exec():
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);CURLPROXY_SOCKS5_HOSTNAME delega il DNS della destinazione al server SOCKS. Usa il protocollo dichiarato; la sola porta 1080 non lo identifica. Nessuna delle due scelte richiede di disabilitare la verifica del certificato del sito.
Controlla $body === false in modo rigoroso. Un corpo vuoto può essere un trasferimento riuscito, mentre un tunnel può fallire prima che esista qualsiasi risposta del sito. Viceversa, un corpo non vuoto può accompagnare 403, 404 o 429. Leggi CURLINFO_RESPONSE_CODE insieme al risultato d’errore di cURL per decidere se la richiesta completata soddisfa il tuo compito.