如何在java上使用带有curl的json rpc
Posted
技术标签:
【中文标题】如何在java上使用带有curl的json rpc【英文标题】:how to use json rpc with curl on java 【发布时间】:2018-08-13 13:29:17 【问题描述】:我在本地计算机上设置了私有以太坊并运行为
geth --bootnodes="enode://b115ff8b97f67a6bd8294a4ea277930bf7825e755705e809442885aba85e397313e46528fb662a3828cd4356f600c10599b77822ebd192199b6e5b8cfdb530c4@127.0.0.1:30303" --networkid 15 console --datadir "private-data" --rpcport "8545" --rpc --rpccorsdomain "*" --rpcapi "eth,web3,personal" --rpcaddr 192.168.44.114
然后我在这里连接远程计算机的区块链节点
我想在 java 上使用带有 curl 的 ethereum json rpc。
我把它编码为
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class shell
public static void makeTran() throws Exception
String shellcmd = "curl -X POST --data \"\"jsonrpc\":\"2.0\",\"method\":\"personal_unlockAccount\",\"params\":[\"0xc7d863e8c89ac4b0336059b4e2cf84a57a6ba7db\", \"1\", 10],\"id\":1\" http://192.168.44.114:8545/ -H \"Content-Type: application/json\"";
System.out.println(shellcmd);
Process process = Runtime.getRuntime().exec(shellcmd);
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
System.out.println(line);
public static void main(String[] args) throws Exception
makeTran();
这必须返回这一行
"jsonrpc":"2.0","id":1,"result":true
但是这个错误是
curl -X POST --data ""jsonrpc":"2.0","method":"personal_unlockAccount","params":["0xc7d863e8c89ac4b0336059b4e2cf84a57a6ba7db", "1", 10],"id":1" http://192.168.44.114:8545/ -H "Content-Type: application/json"
invalid content type, only application/json is supported
这里是命令
curl -X POST --data '"jsonrpc":"2.0","method":"personal_unlockAccount","params":["0xc7d863e8c89ac4b0336059b4e2cf84a57a6ba7db", "1", 10],"id":1' http://192.168.44.114:8545/ -H 'Content-Type: application/json'
可以在终端上运行,但不能在java上运行
如果你帮助我,真的很感激!谢谢
【问题讨论】:
在您在终端运行的命令中,您在数据周围使用单引号(以免与 JSON 中的双引号发生冲突),但在您的 Java 代码中,您' 只是在两个地方都使用双引号。 顺便说一句,您为什么要向curl
发送邮件而不是从 Java 发出 Web 请求?
我都做了。双引号和单引号。但它没有给出同样的错误信息。我认为有一些库可以在 java 上使用带有 curl 的 json rpc。但我找不到它
【参考方案1】:
以您的方式引用不同的部分是行不通的,因此请尝试自己拆分命令行参数。此代码有效:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Test
public static void main(String[] args) throws Exception
Process process = Runtime.getRuntime().exec(new String[]
"curl",
"-H",
"Content-Type: application/json",
"--data",
"\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"id\":1",
"https://mainnet.infura.io/",
);
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
System.out.println(line);
(也就是说,从 Java 发出 HTTP 请求要好得多。有很多资源可用于如何做到这一点。)
【讨论】:
以上是关于如何在java上使用带有curl的json rpc的主要内容,如果未能解决你的问题,请参考以下文章
如何通过远程方法发送 json-rpc http post 请求并在 java 中传递加密参数
如何使用 boost::socket 读取 POST (JSON RPC) 数据?