我对 Java 还很陌生,正在尝试从 Hashicorp 金库中获取一些值 -
当我手动运行curl命令时,它可以工作并返回值,但是当我尝试通过代码运行相同的命令时,我遇到了问题。
curl POST -H "X-Vault-Namespace: dev/rel-box-dev-seed"--data '{"param1":"3f3a-094-193a-cj2e-l6ekn516a","param2 ":"647a-9f3-934fd3-227e-lkrae24be37"}' https://vault.abc.com/v1/auth/role/login
我的Java代码如下 -
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class JavaRunCommand {
public static void main(String[] args) {
String s = null;
try {
List<String> commands = new ArrayList<String>();
commands.add("curl");
commands.add("POST");
commands.add("-H");
commands.add("\\\"X-Vault-Namespace: dev/rel-box-dev-seed\\\"");
commands.add("--data");
commands.add("'{\"param1\":\"3f3a-094-193a-cj2e-l6ekn516a\",\"param2\":\"647a-9f3-934fd3-227e-lkrae24be37\"}'");
commands.add("https://vault.abc.com/v1/auth/role/login");
ProcessBuilder pb = new ProcessBuilder(commands);
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
// read the output from the command
System.out.println("Standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
System.exit(0);
}
catch (IOException e) {
System.out.println("Exception happened - here's what I know: ");
e.printStackTrace();
System.exit(-1);
}
}
}
当我运行此代码时,出现以下错误 -
curl: (92) HTTP/2 流 1 未完全关闭:PROTOCOL_ERROR (err 1)
有人知道我做错了什么吗?或者是否有更好的方法来进行curl操作?
最佳答案
我的建议是使用类似 Fiddler 的内容来观察网络上的流量。 、Wireshark 或 tcpdump。然后,比较这两个请求。您准备它们的方式存在一些差异(可能有引号,如卢克·伍德沃德建议的那样,或者可能有其他差异。)检查两个请求并比较它们的差异,将帮助您理解在这种情况下的问题以及一般来说,可以帮助您改进 future 的请求比较。
关于java - 从 Java 代码调用 CURL 命令会引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59311926/