Proxifier des requêtes HTTP en PHP

Cet article a été publié depuis plus de 6 mois, cela signifie que le contenu peut ne plus être d'actualité.

Ce soir, je me suis demandé comment il était possible de “proxifier” une requête HTTP effectuée depuis un script PHP. Pour être plus précis, je souhaitais faire une requête sur le réseau TOR (ou via n’importe quel proxy de manière générale) via une commande PHP.

En fait cela est beaucoup plus simple que je ne le pensais car l’extension CURL de PHP contient tout le nécessaire pour réaliser cette tâche. Il suffit pour cela de passer les bonnes options à notre ressource :

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://check.torproject.org');
curl_setopt($ch, CURLOPT_PROXY, 'localhost:9150'); // l'URL de notre proxy
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // le type du proxy
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;

Si vous utilisez une bibliothèque type Guzzle, ces dernières fournissent généralement tout le nécessaire pour proxifier vos requêtes HTTP.

D’ailleurs concernant cette dernière, j’ai trouvé un middleware megahertz/guzzle-tor dédié à la mise en place d’une connexion via TOR.