You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中能否结合cmd curl与java.net.http.HttpClient调用REST接口?

实现方式:Java调用TeamController接口(HttpClient / 结合cmd curl)

一、使用Java原生java.net.http.HttpClient直接请求(替代curl)

这种方式无需依赖cmd,纯Java代码实现,适合集成到你的项目中。

1. GET 请求(获取所有团队)

对应你用curl执行的curl -X GET "http://localhost:8081/api/team",Java代码实现如下:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class TeamApiClient {
    public static void main(String[] args) throws Exception {
        // 创建HttpClient实例
        HttpClient client = HttpClient.newHttpClient();

        // 构建GET请求
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://localhost:8081/api/team"))
                .GET()
                .build();

        // 发送请求并获取响应
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // 输出响应状态码和响应体
        System.out.println("状态码: " + response.statusCode());
        System.out.println("响应内容: " + response.body());
    }
}

2. POST 请求(添加新团队)

对应curl的POST调用(比如curl -X POST -H "Content-Type: application/json" -d '{"name":"newTeam"}' "http://localhost:8081/api/team"),Java代码实现:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class TeamApiClient {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();

        // 构造请求体JSON
        String requestBody = "{\"name\":\"newTeamFromJava\"}";

        // 构建POST请求,设置Content-Type为application/json
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://localhost:8081/api/team"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println("状态码: " + response.statusCode());
        System.out.println("响应内容: " + response.body());
    }
}

二、Java代码中调用cmd执行curl命令

如果确实需要结合cmd的curl命令,可以通过ProcessBuilder执行系统命令,获取curl的输出:

1. 执行GET请求的curl命令

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CurlExecutor {
    public static void main(String[] args) {
        try {
            // 构造curl GET命令
            ProcessBuilder pb = new ProcessBuilder("curl", "-X", "GET", "http://localhost:8081/api/team");
            pb.redirectErrorStream(true); // 将错误输出和标准输出合并
            Process process = pb.start();

            // 读取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            System.out.println("curl输出:");
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待命令执行完成,获取退出码
            int exitCode = process.waitFor();
            System.out.println("\ncurl命令退出码: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2. 执行POST请求的curl命令

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CurlExecutor {
    public static void main(String[] args) {
        try {
            // 构造curl POST命令,携带JSON请求体
            ProcessBuilder pb = new ProcessBuilder(
                    "curl", "-X", "POST",
                    "-H", "Content-Type: application/json",
                    "-d", "{\"name\":\"newTeamFromCurlViaJava\"}",
                    "http://localhost:8081/api/team"
            );
            pb.redirectErrorStream(true);
            Process process = pb.start();

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            System.out.println("curl输出:");
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            int exitCode = process.waitFor();
            System.out.println("\ncurl命令退出码: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 确保你的Spring服务已启动在http://localhost:8081端口,且TeamController接口正常可用。
  • 使用HttpClient的方式更适合Java项目集成,不依赖系统环境中的curl;调用cmd curl的方式则要求系统已安装curl(Windows 10+、Linux、macOS默认自带)。

内容的提问来源于stack exchange,提问作者jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:33:57