【发布时间】:2016-12-07 06:19:29
【问题描述】:
我想从 Java 中执行以下 CURL 命令:
curl -v -X PUT --data-binary "@configfile.json" -u 用户名:密码 -D /tmp/grabbit_headers http://server:port/grabbit/job
(http:// 和 server... 之间的空格是根据堆栈溢出准则插入的,但不是我的代码的一部分)
我关注了
http://alvinalexander.com/java/java-exec-processbuilder-process-1,进程2和进程3
创建使用 ProcessBuilder API 执行 shell 命令的 java 类。
如果我直接在 shell 上执行 CURL 命令,它会起作用并产生预期的结果。如果我通过 Java 类使用完全相同的命令,它会在没有任何错误的情况下执行,exitCode=0,但不会产生预期的结果。
此处的预期结果是使用 Grabbit (https://github.com/TWCable/grabbit) 将内容从一个 Adobe AEM 实例迁移到另一个实例。
这是我的主要方法:
public String processBuilderExample() throws IOException, InterruptedException
{
// build the system command we want to run
List<String> commands;
String result="";
/*
* CURL Commands:
* curl -v -X PUT --data-binary "@$configpath" -u $username:$password -D /tmp/grabbit_headers $client$GRABBIT_JOB > /tmp/grabbit
* */
String curl_command="curl -v -X PUT --data-binary \"@"+this.configpath+"\""+" -u "+this.username+":"+this.password+" -D /tmp/grabbit_headers "+this.client+this.GRABBIT_JOB;
commands = new ArrayList<String>(Arrays.asList(curl_command.split(" ")));
result=runCommand(commands);
return result;
}
//@Override
public String runCommand(List<String> commands) throws IOException, InterruptedException
{
// execute the command
SystemCommandExecutor commandExecutor = new SystemCommandExecutor(commands);
int result = commandExecutor.executeCommand();
// get the stdout and stderr from the command that was run
StringBuilder stdout = commandExecutor.getStandardOutputFromCommand();
StringBuilder stderr = commandExecutor.getStandardErrorFromCommand();
StringBuilder finalReturnString=new StringBuilder();
finalReturnString.append("<br/>STDOUT:<br/>");
finalReturnString.append(stdout.toString());
finalReturnString.append("<br/>STDERR:<br/>");
finalReturnString.append(stderr.toString());
return finalReturnString.toString();
}
【问题讨论】:
-
您创建了
finalReturnString,但从未将任何输出放入。 -
只使用 OkHttp,除非你需要一些 curl 怪癖。与可用于 Java 的优秀 HTTP 客户端库相比,为此调用一个进程似乎很痛苦和尴尬。
-
@LukeLee:我已将
append呼叫添加到finalReturnString。
标签: java shell curl processbuilder