Bitcoin RPC funciona en bitcoin-cli pero no en python-bitcoinrpc: sin objeto JSON

Estoy ejecutando un nodo testnet. Puedo usar bitcoin-cli muy bien:

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

Pero cuando ejecuto este código python:

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())

me sale este error:

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

Este es mi bitcoin.conf:

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

Estoy usando la biblioteca python-bitcoinrpc .

Respuestas (3)

Agregué un código para depurar lo que Bitcoin estaba devolviendo; resultó ser un error 401.

<!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>

¿Por qué se desencadenó esto? Si observa mi bitcoin.conf y mi código python, puede ver que el nombre de usuario es diferente (bitcoinrpc vs. rpcuser). Cambiando eso se arregló.

De todos modos, si obtiene el error ValueError: No JSON object could be decoded, este podría ser su problema.

Para cualquier otra persona que encuentre esto, y el problema NO fue un error tipográfico como en la respuesta aceptada:

El problema para mí fue simplemente que tenía mi archivo conf en la ubicación incorrecta.

Instalé esto en Ubuntu 20.04 y guardé el archivo conf en /.bitcoin/bitcoin.conf, pero estaba buscando en /home/user, que en realidad era ~.bitcoin/bitcoin.conf.

Guardar el archivo conf en la ubicación correcta resolvió todo. Ahora podía usar bitcoin-cli sin sudo y los scripts de python usando python-bitcoinrpc.

Si está utilizando la red de prueba, rpcport debería ser 18332.

No es obligatorio; solo necesita usar los mismos puertos en ambos extremos. En mi bitcoin.conf, configuré rpcport en 8332.
@NickODell Eso explicaría mis problemas de conectividad de testnet; No me di cuenta de que el indicador conf rpcport=8332 establece el puerto 8332 para mainnet Y testnet