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
相关产品推荐
相关产品推荐

