curl — клиенту RPC PHP не удается подключить узел биткойнов за сетью TOR с измененным переполнением стека EasyBitcoin-Stack

Я пытаюсь подключиться к узлу биткойн, используя модифицированную версию EasyBitcoin-PHP. Вот изменения, которые я сделал, чтобы заставить его работать над TOR:

Я создал новые поля для прокси TOR: листинг 1.1

...
public $response;//was there already

// TOR and other SOCK5 proxies
private $using_proxy;  #new
private $proxy_host;   #new
private $proxy_port;   #new

private $id = 0;//was there already
...

Затем я создал два новых метода: код-листинг 1.2

...
/**
* @param string $host
* @param int $port
*/
public  function set_proxy($host, $port)
{
$this->proxy_host   = $host;
$this->proxy_port   = $port;
}

/**
* @param boolean|TRUE $proxy_usage
*/
public  function use_proxy($proxy_usage = TRUE)
{
$this->using_proxy  = $proxy_usage;
}
...

Наконец, я добавил несколько строк в метод __call (): код-листинг 1.3

    // Build the cURL session
$curl    = curl_init("{$this->proto}://{$this->host}:{$this->port}/{$this->url}");

$options = array(
CURLOPT_HTTPAUTH       => CURLAUTH_BASIC,
CURLOPT_USERPWD        => $this->username . ':' . $this->password,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS      => 10,
CURLOPT_HTTPHEADER     => array('Content-type: application/json'),
CURLOPT_POST           => true,
CURLOPT_POSTFIELDS     => $request
);

//What Follows is new!!!
if($this->using_proxy){
$options[CURLOPT_PROXY]     = $this->proxy_host;
$options[CURLOPT_PROXYPORT] = $this->proxy_port;
$options[CURLOPT_PROXYTYPE] = CURLPROXY_SOCKS5_HOSTNAME;
}

Поля и методы, которые я создал, и дополнительные строки, которые я добавил в методе __call (), те же, что и в моих других проектах TOR PHP / cURL (всякий раз, когда я хочу, чтобы PHP / cURL подключался к сайту через TOR), и они работают просто хорошо.

Затем я установил и запустил TOR Expert Bundle (в Windows) и использую следующий скрипт для получения информации с узла биткойн.

код-листинг 2

<?php
require_once('easybitcoin.php');

$bitcoin = new Bitcoin('username','password','6cmgzwu3x57dr6z7.onion');

$bitcoin->set_proxy("127.0.0.1", "9050");
$bitcoin->use_proxy();

if($bitcoin->getinfo()){

} else {
var_dump($bitcoin->status);
var_dump($bitcoin->error);
}

И вот что я получаю при запуске скрипта в командной строке:

int(0)
string(50) "Can't complete SOCKS5 connection to 0.0.0.0:0. (5)"

И иногда я получаю это:

int(0)
string(50) "Can't complete SOCKS5 connection to 0.0.0.0:0. (1)"

0

Решение

Задача решена. Сценарий идеален. Проблема заключалась в том, как был установлен сервер.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]