Http 客户端工具类 - HttpUtil
# Http 客户端工具类 - HttpUtil
简介
HttpUtil
是 Hutool 提供的一个用于简化 HTTP 请求操作的工具类。它封装了 JDK 的 HttpURLConnection
,支持 GET、POST、文件上传、文件下载等常见操作,适用于简单的 HTTP 请求场景。HttpUtil
通过简化的 API,能够在一个方法中完成完整的 HTTP 请求,适用于快速开发。
# 1. 请求普通页面
针对常见的 GET 和 POST 请求,HttpUtil
封装了两个方法:
HttpUtil.get
:用于发起 GET 请求,并返回页面内容的字符串。HttpUtil.post
:用于发起 POST 请求,支持传递参数和文件上传。
# 示例:GET 请求页面内容
import cn.hutool.http.HttpUtil;
import cn.hutool.core.util.CharsetUtil;
import java.util.HashMap;
public class HttpUtilExample {
public static void main(String[] args) {
// 1. 直接请求 URL,自动处理编码
String result1 = HttpUtil.get("https://www.baidu.com");
System.out.println(result1);
// 2. 指定页面编码
String result2 = HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);
System.out.println(result2);
// 3. 传入参数进行 GET 请求
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result3 = HttpUtil.get("https://www.baidu.com", paramMap);
System.out.println(result3);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HttpUtil.get(String url)
:直接发送 GET 请求并返回页面内容。url
:请求的 URL 地址。- 返回值:返回请求页面的内容(字符串)。
HttpUtil.get(String url, Charset charset)
:发送 GET 请求并指定返回内容的编码。url
:请求的 URL 地址。charset
:指定页面的编码格式。- 返回值:返回请求页面的内容(字符串)。
HttpUtil.get(String url, Map<String, Object> paramMap)
:发送带参数的 GET 请求。url
:请求的 URL 地址。paramMap
:请求的参数集合,会自动拼接到 URL 中。- 返回值:返回请求页面的内容(字符串)。
作用: 适用于获取网页内容、发送简单的 GET 请求等场景。
实际开发场景: 在需要快速获取网页内容或与外部服务交互时,可以使用 HttpUtil.get
方法。
# 示例:POST 请求提交数据
import cn.hutool.http.HttpUtil;
import java.util.HashMap;
public class HttpUtilExample {
public static void main(String[] args) {
// 创建参数集合
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
// 发送 POST 请求并提交参数
String result = HttpUtil.post("https://www.baidu.com", paramMap);
System.out.println(result);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
HttpUtil.post(String url, Map<String, Object> paramMap)
:发送带参数的 POST 请求。url
:请求的 URL 地址。paramMap
:请求的参数集合,支持文件上传。- 返回值:返回请求页面的内容(字符串)。
作用: 适用于提交表单、进行数据传输、文件上传等场景。
实际开发场景: 在表单提交、与外部服务进行数据交互时,可以使用 HttpUtil.post
方法。
# 2. 文件上传
HttpUtil
支持文件上传,只需将文件对象作为参数传递,上传操作与普通表单提交并无差别。
# 示例:上传文件
import cn.hutool.http.HttpUtil;
import cn.hutool.core.io.FileUtil;
import java.util.HashMap;
public class HttpUtilExample {
public static void main(String[] args) {
// 创建参数集合
HashMap<String, Object> paramMap = new HashMap<>();
// 将文件对象作为参数
paramMap.put("file", FileUtil.file("D:\\face.jpg"));
// 发送 POST 请求上传文件
String result = HttpUtil.post("https://www.baidu.com", paramMap);
System.out.println(result);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
paramMap.put("file", FileUtil.file("路径"))
:将文件作为请求参数,支持文件上传。
作用: 适用于图片上传、文档上传等场景。
实际开发场景: 在需要上传文件到服务器的场景中,可以使用 HttpUtil.post
结合文件对象进行上传。
# 3. 下载文件
在处理大文件下载时,HttpUtil
提供了专门的下载方法,确保内存不被占用过多。下载时采用流的方式写入文件,以应对大文件下载。
# 示例:下载文件
import cn.hutool.http.HttpUtil;
import cn.hutool.core.io.FileUtil;
public class HttpUtilExample {
public static void main(String[] args) {
// 要下载的文件 URL
String fileUrl = "http://example.com/path/to/file.iso";
// 下载文件到指定路径
long size = HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"));
System.out.println("下载文件大小: " + size);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
HttpUtil.downloadFile(String url, File targetFile)
:将文件下载到指定路径。url
:下载文件的 URL。targetFile
:保存文件的目标路径。- 返回值:返回下载文件的大小(字节数)。
作用: 适用于大文件下载、批量文件下载等场景。
实际开发场景: 在下载大文件、如视频、安装包等资源时,使用该方法可以有效避免内存溢出。
# 4. 感知下载进度
对于需要展示下载进度的场景,可以使用 StreamProgress
接口实现下载进度的监听。
# 示例:带进度显示的文件下载
import cn.hutool.http.HttpUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.StreamProgress;
import cn.hutool.core.lang.Console;
public class HttpUtilExample {
public static void main(String[] args) {
String fileUrl = "http://example.com/path/to/file.iso";
// 带进度显示的文件下载
HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"), new StreamProgress() {
@Override
public void start() {
Console.log("开始下载...");
}
@Override
public void progress(long progressSize) {
Console.log("已下载: {}", FileUtil.readableFileSize(progressSize));
}
@Override
public void finish() {
Console.log("下载完成!");
}
});
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
StreamProgress
接口:用于监听下载进度,包括开始、进度更新、完成三个阶段。
作用: 适用于需要实时反馈下载进度的场景。
实际开发场景: 在下载较大文件时,通过显示下载进度条可以提升用户体验。
# 5. 其它实用工具方法
HttpUtil.encodeParams
:对 URL 参数进行编码,只编码键和值。HttpUtil.toParams
和HttpUtil.decodeParams
:将 Map 参数转为 URL 参数字符串,或将 URL 参数字符串解析为 Map 对象。HttpUtil.urlWithForm
:将 URL 字符串与 Map 参数拼接为完整的 GET 请求 URL。HttpUtil.getMimeType
:根据文件扩展名获取 MIME 类型。
# 6. 更多请求参数配置
如果需要配置更多请求参数如自定义请求头、超时时间、代理设置等,可以参考 Hutool 的 HttpRequest
类,它提供了更加灵活和细粒度的 HTTP 请求配置。
以上是按照你提供的模板重新总结的 HttpUtil
,涵盖了主要的功能、API 使用方法、参数说明以及实际开发中的应用场景。如果有更多内容需要补充,随时告诉我!