PHP で cURL を使用して Tor 隠しサービスに接続するにはどうすればよいですか? 質問する

PHP で cURL を使用して Tor 隠しサービスに接続するにはどうすればよいですか? 質問する

次の PHP コードを使用して Tor 隠しサービスに接続しようとしています。

$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);

実行すると、次のエラーが発生します。

ホスト名を解決できませんでした

ただし、Ubuntu のコマンド ラインから次のコマンドを実行すると、

curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion

予想通りの反応が得られました。

PHPカールドキュメントにはこう書かれています:

--socks5-hostname
Use  the  specified  SOCKS5 proxy (and let the proxy resolve the host name).

コマンドラインから動作するのは、Tor (プロキシ) が .onion ホスト名を解決し、それを認識しているからだと思います。上記の PHP コードを実行すると、cURL または PHP が .onion ホスト名を解決しようとしますが、認識されないのではないかと思います。cURL/PHP にプロキシにホスト名を解決させる方法を探しましたが、方法が見つかりません。

Stack Overflowに非常に似た質問があります。PHP を使用すると socks5 プロキシを使用した cURL リクエストが失敗しますが、コマンドラインでは機能します。

ベストアンサー1

CURLOPT_PROXYTYPEオプションを設定する必要がありますCURLPROXY_SOCKS5_HOSTNAME

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

CURLPROXY_SOCKS5_HOSTNAME定義されるPHP 5.6.10以降古いバージョンを使用している場合は、その値を明示的に使用できます7

curl_setopt($ch, CURLOPT_PROXYTYPE, 7);

おすすめ記事