如何在 Java 上使用带有 curl 的 JSON RPC



>我在本地计算机上设置了私有以太坊并运行为

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 的以太坊 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

。如果你帮助我,真的很感激! 谢谢

以你正在做的方式引用不同的部分是行不通的,所以试着自己拆分命令行参数。此代码有效:

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请求要好得多。有很多资源可用于如何做到这一点。

最新更新