J'essaie de me connecter à un service caché Tor en utilisant le code PHP suivant:
$url = 'http://jhiwjjlqpyawmpjx.onion/'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050/");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);
print_r($output);
print_r($curl_error);
Lorsque je l'exécute, j'obtiens l'erreur suivante:
Impossible de résoudre le nom d'hôte
Cependant, lorsque j'exécute la commande suivante à partir de ma ligne de commande dans Ubuntu:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
Je reçois une réponse comme prévu
La documentation PHP cURL dit ceci:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
Je crois que la raison pour laquelle cela fonctionne à partir de la ligne de commande est que Tor (le proxy) résout le nom d'hôte .onion, qu'il reconnaît. Lors de l'exécution du code PHP ci-dessus, je suppose que cURL ou PHP essaie de résoudre le nom d'hôte .onion et ne le reconnaît pas. J'ai cherché un moyen de dire à cURL / PHP de laisser le proxy résoudre le nom d'hôte, mais je ne trouve pas de moyen.
Il y a une question de débordement de pile très similaire, la demande cURL utilisant le proxy socks5 échoue lors de l'utilisation de PHP, mais cela fonctionne via la ligne de commande .
forward-socks5 / localhost:9150 .