【问题标题】:How to connect with bitcoin rpc through Python?如何通过 Python 连接比特币 rpc?
【发布时间】:2019-04-04 00:25:39
【问题描述】:

我在通过 Python 连接到本地比特币节点时遇到了一些麻烦。似乎该节点拒绝通过 Python 进行的每次调用,但使用 bitcoin-cli 时一切正常。

我的 Python 脚本:

import simplejson as json
import requests

with open("C:\\Users\\%USERNAME%\\AppData\\Roaming\\Bitcoin\\testnet3\\.cookie", "r") as creds:
    cookie = creds.read()

NODE_URL = "http://127.0.0.1:8332"
NODE_USER = cookie.split(":")[0]
NODE_PASSWORD = cookie.split(":")[1]

def rpc(method, params=[]):
    payload = json.dumps({
        "jsonrpc": "2.0",
        "id": "minebet",
        "method": method,
        "params": params
    })
    return requests.post(NODE_URL, auth=(NODE_USER, NODE_PASSWORD), data=payload).json()['result']

rpc('getnewaddress')

还有 bitcoin.conf 文件:

testnet=1
server=1
gen=0
prune=1024

我总是得到一个:

ConnectionRefusedError: [WinError 10061] 由于目标机器主动拒绝,无法建立连接

我也尝试在 bitcoin.conf 文件中使用常规的 rpcuser 和 rpcpassword 配置,以及更新的 rpcauth 方法,但它们都不起作用。

【问题讨论】:

  • 尝试使用pycoinnet
  • 仅供参考,有一个专门的比特币问答网站bitcoin.stackexchange.com,您可能更有可能得到及时的回复
  • 您在定义配置后是否重新启动了 bitcoind?在守护进程模式下运行呢?

标签: python python-requests bitcoin json-rpc bitcoind


【解决方案1】:

“连接被拒绝”很可能意味着在您尝试连接的主机名和端口上根本没有任何东西在监听。在您的情况下,您正在从“testnet”数据目录中的 .cookie 文件中提取凭据,但您正在连接到默认的主网 RPC 端口 8332。当您在“testnet”模式下启动 bitcoind 时,默认的 RPC 端口是 18332,不是 8332。

【讨论】: