当前位置: 首页 > news >正文

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 对比

特性UnirestApache HttpClient
学习曲线简单,上手快,API 直观复杂,需要更多样板代码
代码量少,链式调用即可多,需要手动构建请求对象
JSON 支持内置 JSON 支持,解析方便需额外依赖 JSON 库(如 Jackson)
异步请求支持 CompletableFuture需额外配置 Executor 或 AsyncClient
高级功能功能较基础(适合常规 REST 请求)功能强大,可自定义连接池、重试策略
稳定性轻量级,适合快速开发企业级项目首选,更成熟稳健
文件上传/流处理支持,API 简单支持,但代码稍复杂

总结

  • Unirest:快速开发、轻量、少样板代码,适合调用 REST API(如 DeepSeek、OpenAI);
  • HttpClient:功能全面、可定制化强,适合企业级项目或高并发场景。

五、实战场景:参考我的这篇博客

http://www.dtcms.com/a/354819.html

相关文章:

  • 数据湖与数据仓库
  • 「数据获取」25年最新安徽省路网数据安徽省路网分类数据(获取方式看绑定的资源)
  • 自动化三维测量仪工业零件自动外观三维测量-中科米堆CASAIM
  • 三维视频融合驱动视频孪生创新:智汇云舟引领数字孪生产业新范式
  • Kubernetes一EFK日志架构
  • 在 Ubuntu 24.04 上安装二进制文件(逐步指南)
  • HCIA备考知识点总结:第二章华为VRP系统知识点
  • 嵌入式学习日记(36)TCP并发服务器构建——epoll
  • leetcode算法刷题的第二十天
  • 力扣18:四数之和
  • CodeSouler v2.4.0 版本更新
  • 生成式推荐模型的长序列特征:离线存储
  • 超越文本:深入剖析多模态AI的架构原理
  • c++ 观察者模式 订阅发布架构
  • FFmpeg05:编解码实战
  • 机器学习框架下:金价近3400关口波动,AI量化模型对PCE数据的动态监测与趋势预测
  • 企业通讯软件以安全为基,搭建高效的通讯办公平台
  • RA4M2环境搭建与新建工程
  • 新手向:Python开发简易股票价格追踪器
  • Linux内核IPv4 RAW套接字深度解析:从数据包构造到可靠传输的挑战
  • Dify 和 LangChain 区别对比总结
  • 【实操教学】ArcGIS 如何进行定义坐标系
  • Python实现点云基于法向量、曲率和ISS提取特征点
  • 【GM3568JHF】FPGA+ARM异构开发板 使用指南:显示与触摸
  • 第二章:Cesium 视图控制与相机操作
  • Java集合操作:Apache Commons Collections4启示录
  • React中优雅管理CSS变量的最佳实践
  • iOS文件管理在uni-app开发中的实战应用,多工具解决
  • 三、计算机网络与分布式系统(上)
  • Subdev与Media子系统的数据结构