通过Tor连接到API

时间:2018-06-08 19:15:51

标签: php api nginx tor

所以我正在开发一个需要使用nginx和php定期更新比特币价值的网站。我想使用Tor连接到API,因此我的网站的IP不会被共享或泄露。我以前是使用tor的新手,之前只使用过浏览器,之前我没有使用过SOCKS。我试图自学,但我在谷歌上找到的大多数教程都使用VPS作为VPN。我在本地主机上开发网站,希望能够从我的机器上测试它。我如何使用PHP并将我的应用程序配置为使用Tor连接连接到诸如blockchain.info之类的API?

1 个答案:

答案 0 :(得分:0)

我是名为TorUtils的PHP库的作者,其中包含curl包装类,可确保请求通过Tor的SOCKS代理,并且不会泄漏通过Tor在外部发出的IP或DNS请求。我建议你看一下。

首先需要在本地安装,配置和运行Tor守护进程,我不会在这里介绍。您通常可以找到列出here的版本并使用操作系统的软件包管理器进行安装。

一旦Tor启动并运行,默认情况下它将侦听端口9050上的SOCKS连接。以下代码假定Tor在localhost上运行并在9050上侦听SOCKS。

首先,使用composer:

在项目中安装TorUtils
composer require dapphp/torutils

使用它就像以下一样简单:

<?php

require_once 'vendor/autoload.php';

// configure a TorCurlWrapper to proxy through Tor at 127.0.0.1:9050
$tch = new \Dapphp\TorUtils\TorCurlWrapper('127.0.0.1', 9050);

// set curl options as usual
$tch->setopt(CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0');
$tch->setopt(CURLOPT_FOLLOWLOCATION, 1);

try {
    // issue a GET request; throws an \Exception if the request fails for any reason
    $tch->httpGet('https://blockchain.info/ticker');

    // get the response body from the last request
    $response = $tch->getResponseBody();
    $response = $tch->getResponseBody();
    $data     = json_decode($response, true);

    echo "1 BTC equals {$data['USD']['15m']} USD\n";

    $tch->httpGet('https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD');
    $response = $tch->getResponseBody();
    $data     = json_decode($response, true);

    echo "BitcoinAverage ask rate is 1 BTC = {$data['ask']}\n";


} catch (\Exception $ex) {
    echo sprintf("Request to %s failed with error %d: %s\n",
        $tch->getInfo()['url'],
        $ex->getCode(),
        $ex->getMessage());

}

查看相关示例herehere

这个类只做了一点,但确保你通过本地Tor实例安全地使用curl,它确保你的curl和PHP版本足够高,你可以通过Tor解析DNS名称,如果它们不能使请求失败通过Tor代理。此外,它还会略微提取请求和响应,因此可以更轻松地检测故障并从请求中提取标头和响应数据。

如果您有任何问题或建议,请随时提出。