PHPのcurlをtor経由で実行する

PHPで書いたcurlスクリプトをtor経由で実行してみたので忘れないように方法をまとめます。
tor
まずはtorをインストールします
brew install tor
起動します
tor&
ローカルホストの9050番ポートでTorサーバーが建ちます。
試してみる
$ curl -sL ipinfo.io
本当のグローバルIPアドレス
$ curl -sL --socks5 127.0.0.1:9050 ipinfo.io
Torサーバーを経由したグローバルIPアドレス
Torサーバーが建ってる事を確認したら次へ
tor経由でPHPのcurlを実行してみる
とりあえずipinfo.ioにcurlしてみる
gistで見つけたコードをそのまま動かそうとしたら
[warn] Socks version 71 not recognized. (This port is not an HTTP proxy; did you want to use HTTPTunnelPort?)
って言われたので少し修正。オプションが足りてなかったっぽい。
function tor_wrapper($url){
// Adresse et port du TOR
$tor = '127.0.0.1:9050';
// Mettez un TimeOut
$timeout = '300';
$ack = curl_init();
curl_setopt($ack, CURLOPT_PROXY, $tor);
curl_setopt($ack, CURLOPT_URL, $url);
curl_setopt($ack, CURLOPT_HEADER, 1);
curl_setopt($ack, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ack, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ack, CURLOPT_TIMEOUT, $timeout);
// 重要
curl_setopt($ack, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$syn = curl_exec($ack);
// $info = curl_getinfo($ack);
curl_close($ack);
// $info['http_code'];
return $syn;
}
$wrapped = tor_wrapper("http://ipinfo.io");
echo $wrapped;
これで無事IPが変わってたら成功
追記
CURLOPT_PROXYTYPE
に
CURLPROXY_SOCKS5_HOSTNAME
を設定するとonionドメインにもアクセスできるらしい…