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

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.xdnf.cn/news/18997.html

相关文章:

  • .Net Core Web 架构(Request Pipeline)的底层实现
  • 自己定义的模型如何用hf的from_pretrained
  • Linux(一) | 初识Linux与目录管理基础命令掌握
  • 测试题ansible临时命令模块
  • CuTe C++ 简介01,从示例开始
  • imx6ull-驱动开发篇47——Linux SPI 驱动实验
  • Electron解压缩文件
  • hive on tez为什么写表时,要写临时文件到hdfs目录
  • docker 1分钟 快速搭建 redis 哨兵集群
  • 配置nginx.conf (增加21001端口实例操作)
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(三)
  • [灵动微电子 MM32BIN560CN MM32SPIN0280]读懂电机MCU之比较器
  • jQuery 从入门到实践:基础语法、事件与元素操作全解析
  • mac电脑双屏显示时程序坞跑到副屏的解决方法
  • 机器视觉学习-day10-图像添加水印
  • Mybatis 与 Springboot 集成过程详解
  • Kubernetes一EFK日志架构
  • Ovis2.5技术解密:原生分辨率与“反思模式”如何铸就新一代MLLM王者
  • 嵌入式学习日志————实验:串口发送串口发送+接收
  • 2025年渗透测试面试题总结-37(题目+回答)
  • 2024年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 零基础-力扣100题从易到难详解(持续更新1-10题)
  • 【链表 - LeetCode】25. K 个一组翻转链表
  • DAY 58 经典时序预测模型2
  • Kubernetes 的20 个核心命令分类详解
  • Linex系统网络管理(二)
  • 数据结构第8章 排序(竟成)
  • SqlHelper类库的使用方法
  • .NET周刊【8月第3期 2025-08-17】
  • 鸿蒙ArkUI 基础篇-06-组件基础语法-Column/Row/Text