Gardez le site dans curl_init() et configurez l’intermédiaire sur ce handle. PHP a besoin de son extension cURL ; un exécutable curl fonctionnel dans le terminal ne prouve pas que l’extension soit disponible.

<?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;

Remplacez l’IP et le port de documentation par votre proxy HTTP ou une entrée de la liste de proxys HTTP. CURLOPT_NOPROXY efface les règles d’exclusion pour ce test ; CURLOPT_RETURNTRANSFER renvoie le corps au lieu de l’envoyer au navigateur. Le délai de connexion borne l’établissement, et le délai global limite l’opération cURL.

Pour un point de connexion SOCKS5, remplacez les options du proxy HTTP avant curl_exec() :

curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

CURLPROXY_SOCKS5_HOSTNAME délègue le DNS de destination au serveur SOCKS. Utilisez le protocole annoncé ; le port 1080 seul ne l’identifie pas. Aucun des deux choix de proxy n’exige de désactiver la vérification du certificat du site.

Testez $body === false strictement. Un corps vide peut correspondre à un transfert réussi, tandis qu’un échec du tunnel peut survenir avant toute réponse du site. Inversement, un corps non vide peut accompagner un 403, 404 ou 429. Lisez CURLINFO_RESPONSE_CODE avec le résultat d’erreur de cURL pour décider si la requête terminée remplit votre objectif.

Articles similaires