2015-08-11 3 views
1

Я пытаюсь выполнить POST-запрос через JSON-RPC на моем сервере NodeJS. Преобразование следующего завитка команды:NodeJS POST Request Over JSON-RPC

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

ответ

0

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 автоматически анализировать ответ как JSON.

+0

Я могу» t seam, чтобы заставить его работать, вы можете посмотреть запрос на завиток, который я пытаюсь скопировать выше. Благодаря! – BDGapps

2

Вы упускаете --header вариант:

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

Чтобы использовать «personal_newAccount» и варианты отдыха от Ethereum Docs вам нужно запустить сервер с необходимыми API,:

--rpcapi "personal,eth,web3"