Java HTTP 请求:Unirest 使用指南及与 HttpClient 对比
一、什么是 Unirest
Unirest 是一个轻量级的 HTTP 请求库,由 Kong 提供。特点如下:
- 简单易用:一行代码即可发送 GET/POST 请求;
- 跨平台:支持 Java、Node.js、Python 等语言;
- 支持 JSON:内置 JSON 解析功能,简化请求和响应处理;
- 支持异步和同步请求;
- 支持文件上传、流式处理。
适合快速开发 REST API 调用,尤其是像 DeepSeek、OpenAI 这类 JSON 接口。
二、Maven 依赖
<dependency><groupId>com.konghq</groupId><artifactId>unirest-java</artifactId><version>3.14.1</version> <!-- 请使用最新版本 -->
</dependency>
三、基本使用示例
1. GET 请求
import kong.unirest.Unirest;
import kong.unirest.HttpResponse;public class UnirestExample {public static void main(String[] args) {// 发送 GET 请求HttpResponse<String> response = Unirest.get("https://api.github.com/repos/Kong/unirest-java").header("Accept", "application/json").asString();// 输出状态码和响应体System.out.println("Status: " + response.getStatus());System.out.println("Body: " + response.getBody());}
}
2. POST 请求(JSON)
import kong.unirest.Unirest;
import kong.unirest.HttpResponse;
import org.json.JSONObject;public class UnirestPostExample {public static void main(String[] args) {JSONObject json = new JSONObject();json.put("name", "Alice");json.put("age", 25);HttpResponse<String> response = Unirest.post("https://httpbin.org/post").header("Content-Type", "application/json").body(json.toString()).asString();System.out.println("Status: " + response.getStatus());System.out.println("Response: " + response.getBody());}
}
3. 设置超时
Unirest.config().socketTimeout(60_000) // 读取超时 60 秒.connectTimeout(10_000); // 连接超时 10 秒
4. 释放资源
Unirest.shutDown(); // 在应用关闭时调用,释放连接池
四、Unirest 与 HttpClient 对比
特性 | Unirest | Apache HttpClient |
---|---|---|
学习曲线 | 简单,上手快,API 直观 | 复杂,需要更多样板代码 |
代码量 | 少,链式调用即可 | 多,需要手动构建请求对象 |
JSON 支持 | 内置 JSON 支持,解析方便 | 需额外依赖 JSON 库(如 Jackson) |
异步请求 | 支持 CompletableFuture | 需额外配置 Executor 或 AsyncClient |
高级功能 | 功能较基础(适合常规 REST 请求) | 功能强大,可自定义连接池、重试策略 |
稳定性 | 轻量级,适合快速开发 | 企业级项目首选,更成熟稳健 |
文件上传/流处理 | 支持,API 简单 | 支持,但代码稍复杂 |
总结:
- Unirest:快速开发、轻量、少样板代码,适合调用 REST API(如 DeepSeek、OpenAI);
- HttpClient:功能全面、可定制化强,适合企业级项目或高并发场景。