使用 java 按顺序运行多个 curl 命令

如何解决使用 java 按顺序运行多个 curl 命令

我能够在终端顺序中运行命令并且它的工作正常。我想通过java实现的同样的事情

token=$(curl -H "Content-Type: application/json" -X POST --data @"/Users/surya/KarateUIAutomation/target/surefire-reports/cloud_auth.json" https://xray.cloud.xpand-it.com/api/v2/authenticate| tr -d '"')

在第二个 curl 命令中,第一个标记作为参数传递

curl -H "Content-Type: application/json" -X POST -H "Authorization: Bearer $token"  --data @"/Users/surya/KarateUIAutomation/target/surefire-reports/testcase.firstUITest.json" https://xray.cloud.xpand-it.com/api/v2/import/execution/cucumber

我写了下面的java代码,但不知道如何传递上面的2个命令并按顺序运行

String[] command = {" "};
           
           
            ProcessBuilder process = new ProcessBuilder(command); 
            Process p;
            try
            {
                p = process.start();
                 BufferedReader reader =  new BufferedReader(new InputStreamReader(p.getInputStream()));
                    StringBuilder builder = new StringBuilder();
                    String line = null;
                    while ( (line = reader.readLine()) != null) {
                            builder.append(line);
                            builder.append(System.getProperty("line.separator"));
                    }
                    String result = builder.toString();
                    System.out.print(result);

            }
            catch (IOException e)
            {   System.out.print("error");
                e.printstacktrace();
            }
    }

解决方法

您可以在以下代码中看到一个具体示例,该示例取自 repo,它为 REST API 实现了 Java 客户端库。 也许您可以使用它(请参阅文档 here),从而避免最终实现它。

package net.azae.xray;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpClient {
    private final static Logger logger = LoggerFactory.getLogger(HttpClient.class);

    // TODO : get base URL from conf
    String baseUrl = "https://xray.cloud.xpand-it.com";

    public static String jsonPost(String toURL,String data,String token) {
        URL url;
        String response = "";
        try {
            url = new URL(toURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type","application/json");
            if (token != null)
                conn.setRequestProperty("Authorization","Bearer " + token);

            conn.setDoInput(true);
            conn.setDoOutput(true);
            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
            writer.write(data);
            writer.flush();
            writer.close();
            os.close();
            int responseCode = conn.getResponseCode();
            if (responseCode == HttpsURLConnection.HTTP_OK) {
                String line;
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                while ((line = br.readLine()) != null) {
                    response += line;
                }
            } else {
                response = "";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response;
    }

    public static String jsonPost(String toURL,String data) {
        return jsonPost(toURL,data,null);
    }

    String getToken(String json) {
        String response = jsonPost(baseUrl + "/api/v1/authenticate",json);
        return response.replace("\"","");
    }

    void publishToXray(String token,String inputJson) {
        logger.debug("Publish input: " + inputJson);
        String response = jsonPost(baseUrl + "/api/v1/import/execution",inputJson,token);
        logger.debug("Publish response: " + response);
    }
}

https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java

,

我同意 M.P. Korstanje,从 Java 启动 curl 命令行,在从纯 Java HTTP 库调用 URL 之前,这是一个糟糕的解决方案。

HttpClient.getToken 替换你的第一个 curl 命令 (https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java#L58)

你可以用这个java代码使用它:

String token = new HttpClient().getToken("{ " +
                "\"client_id\": \"" + xray_client_id + "\"," +
                "\"client_secret\": \"" + xray_client_secret + "\"" +
                " }";);

和 HttpClient.publishToXray 可以更新以推送黄瓜结果 (https://gitlab.com/azae/outils/junit-xray/-/blob/master/src/main/java/net/azae/xray/HttpClient.java#L63)

你可以用这个java代码使用它:

String json = "Your json"; //See https://docs.getxray.app/display/XRAYCLOUD/Import+Execution+Results+-+REST
new HttpClient().publishToXray(token,json);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?