NodeJS POST请求通过JSON-RPC

我试图通过JSON-RPC在我的NodeJS服务器上执行POST请求。 转换下面的curl命令:

curl -X POST --data '{"jsonrpc":"2.0","method":"personal_newAccount","params":["pass"],"id":74}' http://localhost:8545 

在NodeJS中,我一直在收到:

 200 {"id":-1,"jsonrpc":"2.0","error":{"code":-32600,"message":"Could not decode request"}} 

在标题中,我指定了Content-Type。 如果有人能指出我没有指定什么,以及如何添加它,将不胜感激。

 var headers = { 'User-Agent': 'Super Agent/0.0.1', 'Content-Type': 'application/json-rpc', 'Accept':'application/json-rpc' } var options = { url: "http://localhost:8545", method: 'POST', headers: headers, form: {"jsonrpc":"2.0","method":"personal_newAccount","params":["pass"],"id":1} } request(options, function (error, response, body) { if (!error && response.statusCode == 200) { res.writeHeader(200, {"Content-Type": "text/plain"}); res.write(res.statusCode.toString() + " " + body); }else{ res.writeHeader(response.statusCode, {"Content-Type": "text/plain"}); res.write(response.statusCode.toString() + " " + error); } res.end(); }) 

您错过了--header选项:

 curl --request POST \ --header 'Content-type: application/json' \ --data '{"jsonrpc":"2.0","method":"personal_newAccount","params":["pass"],"id":74}' \ http://localhost:8545 

form是针对application/x-www-url-encoded请求,而不是JSON。 试试这些选项:

 var options = { url: "http://localhost:8545", method: 'POST', headers: headers, body: JSON.stringify({ jsonrpc: '2.0', method: 'personal_newAccount', params: ['pass'], id: 1 }) } 

你也可以在你的选项中设置json: true ,让request自动将响应parsing为JSON。

要使用“personal_newAccount”和Ethereum Docs中的其他选项,您需要使用所需的API启动服务器:

 --rpcapi "personal,eth,web3"