Библиотека JSON RPC не может подключиться к биткойну?

Я могу подключиться к биткойну с помощью моей командной строки, и процесс выполняется с соответствующим портом, но когда я пытаюсь запустить его через XAMPP после использования библиотеки JSON-RPC (я использовал вступление разработчика PHP для кода), он дает мне следующая ошибка, и я не знаю, почему:

Warning:  fopen(): Failed to enable crypto in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php on line 132

Warning:  fopen(https://...@127.0.0.1:8332/): failed to open stream: operation failed in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php on line 132
Fatal error:  Uncaught exception 'Exception' with message 'Unable to connect to https://user:password
@127.0.0.1:8332/' in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php:140
Stack trace:
#0 /opt/lampp/htdocs/bitcoins/testServer.php(7): jsonRPCClient->__call('getinfo', Array)
#1 /opt/lampp/htdocs/bitcoins/testServer.php(7): jsonRPCClient->getinfo()
#2 {main}
  thrown in /opt/lampp/htdocs/bitcoins/jsonRPCClient.php on line 140

Код следующий: (мы пытались переключаться между http и https, и он все еще не работает)

require_once 'jsonRPCClient.php';

$bitcoin = new jsonRPCClient('https://user:password@127.0.0.1:8332/');

echo "<pre>\n";
print_r($bitcoin->getinfo());
echo "</pre>";
Вы уверены, что вводите правильный логин/пароль?
@SalvadorDali: я скопировал и вставил его с bitcoin.conf, также попытался перенести хостинг на Amazon EC2, и это совершенно не сработало.

Ответы (5)

Как упомянул @Bittylicious, JSON-RPC немного глючит.

https://en.bitcoin.it/wiki/API_reference_(JSON-RPC)#PHP

Примечание. Библиотека jsonRPCClient использует fopen() и выдает исключение с сообщением «Невозможно подключиться», если получает ошибку 404 или 500 от bitcoind. Это не позволяет вам видеть сообщения об ошибках, сгенерированные bitcoind (поскольку они отправляются со статусом 404 или 500).

Вместо этого у вас есть возможность использовать EasyBitcoin , который будет выдавать более точные сообщения об ошибках, и это почти то же самое, что и JSON-RPC.

<?php
 require_once 'YOUR_FOLDER/easybitcoin.php';
 $rpc_host = 'YOUR_IP';
 $rpc_port = 'YOUR_PORT';
 $rpc_user = 'YOUR_USER';
 $rpc_pass = 'YOUR_KEY';
 $bitcoin = new Bitcoin($rpc_user, $rpc_pass, $rpc_host, $rpc_port);
 print_r($bitcoin->getinfo());
 print_r($bitcoin->listaccounts());
 print_r($bitcoin->listreceivedbyaddress(0, true));
?>

Надеюсь это поможет!

По умолчанию RPC bitcoind работает по протоколу http, а не https. Если, конечно, вы не включили SSL, сгенерировав ключ SSL и установив требуемый параметр конфигурации...

 rpcssl=1

В противном случае эта строка:

$bitcoin = new jsonRPCClient('https://user:password@127.0.0.1:8332/');

Следует изменить на:

$bitcoin = new jsonRPCClient('http://user:password@127.0.0.1:8332/');

Если это не ответ, дайте мне знать. Есть несколько других способов обойти это.

Добро пожаловать в мир кристаллографических валют на основе клиента сатоши!

Я думаю, что этот маленький кусочек информации должен быть размещен довольно неуместно, он скрыт в документации, которую никто не читает.

Просто добавлю немного полезной информации.

jsonRPCClient не возвращает никакой полезной информации об ошибках, и все ошибки будут просто возвращать сообщение о невозможности подключения . Это связано с тем, что биткойн возвращает код состояния ошибки HTTP, отличный от 2xx. Это ужасно для отладки.

Я внес несколько хакерских изменений в jsonRPCClient, чтобы обойти это. Что вам нужно сделать, это:

  1. Добавьте *'ignore_errors' => true* в массив $opts
  2. Измените строку ошибки, которая выдает ошибку запроса, чтобы она читалась как throw new Exception('Ошибка запроса: '.$response['error']['code'].' - '.$response['error']['message']) ; .

Последнее изменение, в частности, делает jsonRPCClient специфичным для bitcoind, но в любом случае не следует предполагать, что ошибка является строкой.

Testnet подключается к порту 18332, если вы не укажете порт в своем файле conf. Изменение его на это должно исправить проблему.

Я решил эту проблему, пропустив -rpcthreads=16, хотя сервер VPS является одноядерным