1. 概述

在本教程中,我们将介绍如何在 Java 程序中调用 curl 工具。

Curl 是一个强大的网络工具,支持多种协议(如 HTTP、FTP、TELNET、SCP 等),用于在客户端与服务器之间传输数据

2. 基础使用:通过 ProcessBuilder 调用 Curl

最推荐的方式是使用 ProcessBuilder 类来构建并执行系统命令,这是 Java 中标准的外部进程管理方式。

来看一个发送 GET 请求的例子:

String command =
  "curl -X GET https://postman-echo.com/get?foo1=bar1&foo2=bar2";
ProcessBuilder processBuilder = new ProcessBuilder(command.split(" "));

⚠️ 注意:如果系统 PATH 中没有 curl,你需要提供完整路径,例如 /usr/bin/curl

接着可以设置工作目录并启动进程:

processBuilder.directory(new File("/home/"));
Process process = processBuilder.start();

获取返回数据的标准方式是读取 InputStream

InputStream inputStream = process.getInputStream();

执行完成后,可以通过以下方式获取退出码:

int exitCode = process.exitValue();

如果你需要复用同一个 ProcessBuilder 实例来执行不同的命令,可以通过 command() 方法传入新的参数数组:

processBuilder.command(
  new String[]{"curl", "-X", "GET", "https://postman-echo.com?foo=bar"});

最后,别忘了释放资源:

process.destroy();

3. 使用 Runtime.getRuntime() 的替代方式

除了 ProcessBuilder,也可以使用 Runtime.getRuntime().exec() 来执行命令。这种方式更简单粗暴,但在复杂参数处理上容易踩坑 ❌。

举个 POST 请求的例子:

curl -X POST https://postman-echo.com/post --data foo1=bar1&foo2=bar2

Java 代码如下:

String command = "curl -X POST https://postman-echo.com/post --data foo1=bar1&foo2=bar2";
Process process = Runtime.getRuntime().exec(command);

获取输入流的方式与之前一致:

process.getInputStream();

同样,使用完毕后记得调用 destroy() 释放资源。

4. 总结

本文展示了在 Java 中使用 curl 的两种常见方式:

  • ✅ 使用 ProcessBuilder(推荐)
  • ⚠️ 使用 Runtime.getRuntime().exec()(需注意命令参数解析问题)

这些示例代码均可在 GitHub 仓库 中找到。


原始标题:Using Curl in Java