Comment puis-je me connecter à un service caché Tor en utilisant cURL en PHP?
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);
quand je l'exécute, j'obtiens l'erreur suivante:
n'a pas pu résoudre le nom d'hôte
Cependant, quand je lance la commande suivante à partir de ma ligne de commande sous Ubuntu:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
je reçois une réponse comme prévu
The PHP cURL
--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 parce que Tor (le mandataire) est en train de résoudre le .l'oignon nom d'hôte, dont il reconnaît. Lors de l'exécution du code PHP ci-dessus, je pense que cURL ou PHP essaye de résoudre le .nom d'hôte oignon 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 pile très similaire Question de débordement, la requête cURL utilisant le proxy socks5 échoue lorsque PHP est utilisé, mais il fonctionne à travers la ligne de commande .
3 réponses
ressemble à CURLPROXY_SOCKS5_HOSTNAME
N'est pas défini dans PHP, mais vous pouvez explicitement utiliser sa valeur, qui est égale à 7:
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
j'utilise Privoxy et cURL à gratter Tor pages:
<?php
$ch = curl_init('http://jhiwjjlqpyawmpjx.onion'); // Tormail URL
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, "localhost:8118"); // Default privoxy port
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_exec($ch);
curl_close($ch);
?>
après avoir installé Privoxy, vous devez ajouter cette ligne au fichier de configuration ( /etc/privoxy/config
). Remarque l'espace et '."a la fin de la ligne.
forward-socks4a / localhost:9050 .
puis redémarrez Privoxy.
/etc/init.d/privoxy restart
essayez d'ajouter ceci:
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);