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 .

306
demandé sur Community 2013-03-16 07:39:25

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);
91
répondu dr.scre 2013-10-02 20:10:27

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
19
répondu FattyPotatoes 2016-02-26 18:32:19

essayez d'ajouter ceci:

curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
7
répondu Anthony Garcia 2013-04-04 19:04:42