Bitcoin RPC funktioniert in bitcoin-cli, aber nicht in python-bitcoinrpc: Kein JSON-Objekt

Ich betreibe einen Testnet-Knoten. Ich kann bitcoin-cli gut verwenden:

>bitcoin-cli.exe getinfo
{
    "version" : 100000,
    "protocolversion" : 70002,
    "walletversion" : 60000,
[... snipped]

Aber wenn ich diesen Python-Code ausführe:

from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
import logging

rpc_user = "rpcuser"
rpc_password = "xxxxx"

logging.basicConfig()
logging.getLogger("BitcoinRPC").setLevel(logging.DEBUG)

rpc_connection = AuthServiceProxy("http://%s:%s@192.168.1.39:8332/" % (rpc_user, rpc_password))
print(rpc_connection.getinfo())

Ich bekomme diesen Fehler:

DEBUG:BitcoinRPC:-1-> getinfo []

Traceback (most recent call last):
  File "<path>\rawtransactiondemo\raw.py", line 11, in <module>
    print(rpc_connection.getinfo())
[... snipped]
  File "C:\Python27\lib\json\decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Das ist meine bitcoin.conf:

testnet=1
rpcuser=bitcoinrpc
rpcpassword=xxxxx
daemon=1
rpcport=8332
rpcallowip=192.168.1.39
bind=192.168.1.39

Ich verwende die python-bitcoinrpc- Bibliothek.

Antworten (3)

Ich habe etwas Code hinzugefügt, um zu debuggen, was Bitcoin zurücksendet – es stellte sich als 401-Fehler heraus.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>

Warum wurde das ausgelöst? Wenn Sie sich meine bitcoin.conf und meinen Python-Code ansehen, können Sie sehen, dass der Benutzername unterschiedlich ist (bitcoinrpc vs. rpcuser). Das zu ändern hat es behoben.

Wie auch immer, wenn Sie den Fehler erhalten ValueError: No JSON object could be decoded, könnte dies Ihr Problem sein.

Für alle anderen, die dies finden und das Problem KEIN Tippfehler wie in der akzeptierten Antwort war:

Das Problem für mich war einfach, dass ich meine conf-Datei am falschen Ort hatte.

Ich habe dies auf Ubuntu 20.04 installiert und die conf-Datei in /.bitcoin/bitcoin.conf gespeichert, aber sie hat in /home/user gesucht, was eigentlich ~.bitcoin/bitcoin.conf war.

Das Speichern der conf-Datei am richtigen Ort hat alles behoben. Ich könnte jetzt bitcoin-cli ohne sudo und die Python-Skripte mit python-bitcoinrpc verwenden.

Wenn Sie das Testnet verwenden, sollte rpcport 18332 sein.

Es ist nicht erforderlich; Sie müssen nur die gleichen Ports an beiden Enden verwenden. In meiner bitcoin.conf habe ich rpcport auf 8332 gesetzt.
@NickODell Das würde meine Probleme mit der Testnet-Konnektivität erklären; Ich habe nicht bemerkt, dass das Flag conf rpcport=8332 Port 8332 für Mainnet UND Testnet gesetzt hat