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 仓库 中找到。