我用一个java Process调用curl来发送json文本到一个API。我在一个循环中调用这个代码,所有的更新都工作了,除了第一个,它失败了,退出代码35。我相信错误代码来自curl,是一个TLS/SSL连接错误。
这是重复调用的方法的核心。同样,只有第一次更新失败,所有后续更新都成功了。也许在建立初始File或ProcessBuilder时会有一些开销,然后这些开销会用于后续调用?
File f = new File("c:\\temp\\json.txt");
String str = "{\"batch_fields\":{\"Batch Number\":\""+num+"\"}}";
try(BufferedWriter writer = new BufferedWriter(new FileWriter(f))) {
writer.write(str);
}
StringBuilder sb = new StringBuilder();
StringBuilder command = new StringBuilder("c:\\Program Files\\curl\\bin\\curl -H \"X-Token: "+BatchUtils.API_TOKEN_READ_WRITE+"\"");
command.append(" -X PUT -H \"Content-Type: application/json\" ");
command.append(" -d \"@c:\\temp\\json.txt\" ");
command.append("https://blah/blah/batches/"+batchId+"\"");
ProcessBuilder processBuilder = new ProcessBuilder(command.toString().split(" "));
Process process = processBuilder.start();
InputStream is = process.getInputStream();
if(is == null || is.read() == -1) {
is = process.getErrorStream();
sb.append(" Failed updateBatchNumber: " + is.toString());
}
else
sb.append(" Updated batch number";
int exitCode = process.waitFor();
sb.append(". exit code: " + exitCode);
process.destroy();
字符串
1条答案
按热度按时间frebpwbc1#
首先尝试简化到下面。当然,json的创建不太合适,但我暂时保持原样。当你得到正确的错误输出时,你可以添加更多,下面应该给你给予:
字符串