JSON-RPC-Bibliothek kann keine Verbindung zu Bitcoin herstellen?

Ich kann über meine Befehlszeile eine Verbindung zu Bitcoind herstellen und der Prozess läuft mit dem entsprechenden Port, aber wenn ich versuche, ihn über XAMPP auszuführen, nachdem ich die JSON-RPC-Bibliothek verwendet habe (ich habe das PHP-Entwickler-Intro für den Code verwendet), gibt es mir der folgende Fehler, und ich weiß nicht warum:

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

Der Code ist der folgende: (wir haben versucht, zwischen http und https umzuschalten und es funktioniert immer noch nicht)

require_once 'jsonRPCClient.php';

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

echo "<pre>\n";
print_r($bitcoin->getinfo());
echo "</pre>";
Sind Sie sicher, dass Sie das richtige Login/Passwort angeben?
@SalvadorDali: Ich habe es aus bitcoin.conf kopiert und eingefügt, auch versucht, das Hosting auf Amazon EC2 zu verschieben, und es hat absolut nicht funktioniert.

Antworten (5)

Wie @Bittylicious erwähnte, ist der JSON-RPC ein wenig fehlerhaft

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

Hinweis: Die jsonRPCClient-Bibliothek verwendet fopen() und löst eine Ausnahme mit der Meldung „Unable to connect“ aus, wenn sie einen 404- oder 500-Fehler von Bitcoin erhält. Dies verhindert, dass Sie von Bitcoin generierte Fehlermeldungen sehen können (da sie mit Status 404 oder 500 gesendet werden).

Sie haben stattdessen die Möglichkeit, EasyBitcoin zu verwenden, das genauere Fehlermeldungen ausgibt und so ziemlich das gleiche wie JSON-RPC ist

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

Hoffe das hilft!

Standardmäßig geht Bitcoin RPC über http, nicht https. Es sei denn, Sie haben SSL aktiviert, indem Sie einen SSL-Schlüssel generiert und die erforderliche Konfigurationsoption festgelegt haben ...

 rpcssl=1

Ansonsten diese Zeile:

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

Sollte geändert werden in:

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

Wenn das nicht antwortet, lass es mich wissen. Es gibt ein paar andere Möglichkeiten, es zu umgehen.

Willkommen in der Welt der kristallografischen Währungen basierend auf dem Satoshi-Client!

Ich denke, diese kleine Information sollte ziemlich unangemessen gepostet werden, sie ist in einer Dokumentation versteckt, die niemand liest.

Nur um einige nützliche Informationen hinzuzufügen.

Der jsonRPCClient gibt keine nützlichen Informationen zu Fehlern zurück, und alle Fehler geben nur die Meldung „ Verbindung konnte nicht hergestellt“ zurück. Dies liegt daran, dass Bitcoin einen HTTP-Fehlerstatuscode zurückgibt, der nicht 2xx ist. Das ist schrecklich für das Debuggen.

Ich habe ein paar hackige Änderungen am jsonRPCClient vorgenommen, um dies zu umgehen. Was Sie tun müssen, ist:

  1. Fügen Sie *'ignore_errors' => true* zum $opts-Array hinzu
  2. Ändern Sie die Fehlerzeile, die Request error auslöst, in read throw new Exception('Request error: '.$response['error']['code'].' - '.$response['error']['message']) ; .

Insbesondere die letztere Änderung macht den jsonRPCClient spezifisch für Bitcoin, aber es sollte nicht davon ausgegangen werden, dass error sowieso eine Zeichenfolge ist.

Testnet stellt eine Verbindung über Port 18332 her, es sei denn, Sie geben den Port in Ihrer conf-Datei an. Wenn Sie es dahingehend ändern, sollte das Problem behoben sein.

Ich habe dieses Problem gelöst, indem ich bestanden habe -rpcthreads=16, obwohl der VPS-Server ein einzelner Kern ist