首页 > 解决方案 > 使用 CURL 将 JSONRPC 命令发布到 pyBitmessage

问题描述

我正在尝试使用cpr Curl 实现将命令发布到 c++ 中的pyBitmessage XML-RPC 服务器。像这样:

auto r = cpr::Post(cpr::Url{ "http://xxx:yyy@localhost:8442/" },
    cpr::Body{ "{\"jsonrpc\":\"1.0\",\"id\":1,\"method\":\"add\",\"params\":{\"a\":2,\"b\":3}}" },
    cpr::Header{ { "Content-Type", "application/json" } });

作为回报,我有r返回一个 status_code 200 但带有空文本结果和此错误值:

{code=INTERNAL_ERROR (4) message="transfer closed with 349 bytes remaining to read" }

我究竟做错了什么?

标签: c++11curlxml-rpcjson-rpc

解决方案


我终于找到了解决方案,pyBitmessage 是一个常规的 XML-RPC,而不是像 Bitcoind 实现的 JSONish 版本的 RPC。所以正确的调用方法是纯 XML:

auto r = cpr::Post(cpr::Url{ "http://xxx:yyy@127.0.0.1:8442/" },
cpr::Body{ "<methodCall><methodName>add</methodName><params><param><value><int>123</int></value></param><param><value><int>456</int></value></param></params></methodCall>" });

推荐阅读