【发布时间】:2017-10-17 20:58:46
【问题描述】:
我想知道在它发生之前将要执行的命令。
String cmd[] = {"curl",
"-X",
"POST",
"https://api.renam.cl/medicion/insert?access-token={Yoq3UGQqDKP4D1L3Y6xIYp-Lb6fyvavpF3Lm-8cD}",
"-H",
"content-type: application/json",
"-d",
json.toString()};
ProcessBuilder pb = new ProcessBuilder(cmd);
Log.debug("COMANDO.TOSTRING " + pb.command().toString());
Process p = pb.start();
Log.debug(p.getOutputStream().toString());
p.waitFor();
BufferedReader reader
= new BufferedReader(new InputStreamReader(p.getInputStream()));
String readline;
while ((readline = reader.readLine()) != null) {
Log.debug(readline);
}
使用 readline 我有服务器应答输出,但我不知道如何获取我使用 processbuilder 执行的 curl 命令。
编辑 1:
我只需要使用 linux 控制台发送这个命令:
curl -X POST 'https://api.com/data/insert?access-token=Yoq3UGQqDKP4D1L3Y6xIYp-Lb6fyvavpF3Lm-8cD' -H 'content-type: application/json' -d '{ "pm25":2, "timestamp":1495077872, "dispositivo_mac": "12:34:56: 78:90:12" }'
基本上我需要在star方法执行前打印ProcessBuilder对象处理的cmd数组才能看到。
【问题讨论】:
-
System.out.println(Arrays.toString(cmd)) .. 这会告诉你你将要运行什么命令。
-
该命令的打印结果与 pb.command().toString() 相同,只是用逗号分隔的字符串数组元素
-
无需以这种方式使用 curl - 您可以轻松地使用例如泽西岛,无需使用外部进程。
-
你能解释一下吗?
-
对应的代码在
ProcessImpl.createCommandLine。可悲的是,它是私人的。可能可以复制相应的代码,或者添加断点并进行调试。
标签: java linux curl processbuilder