java - 从 Java 代码调用 CURL 命令会引发异常

标签 java curl

我对 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/

相关文章:

java - 如何使用ArrayList?

c# - Java 中的 DataTable 等价物

java - TabLayout 中点之间的间距

PHP cURL 实时代理(流文件)

linux - 松弛 curl 不起作用

python - 从 Python 运行 Rsync

java - 我如何在 java 代码中优化这个 mySQL 事务?

java - Servlet 将 POST 请求作为 GET 处理

c++ - 7.36 重建后 libcURL 未解析的外部

curl - 您如何使用 cURL 在使用 Devise 的 Rails 应用程序上进行身份验证?