HTTP 请求 Base 教程
本教程提供了 HTTP 请求包中 Base 类的概述,该类是 lightweight-component/aj-util 库的一部分。Base 类为 Java 应用程序中的 HTTP 请求提供了基础功能。
简介
Base 类使用 Java 内置的 HttpURLConnection 提供了 HTTP 请求的核心功能。它处理连接初始化、配置和 HTTP 请求的执行。该类作为包中其他 HTTP 请求类(如 Get、Post、Delete 等)的基础。
主要特性
- 简单的 HTTP 请求接口
- 连接超时和读取超时处理
- 错误处理和日志记录
- 支持自定义 HTTP 头
- 响应处理
方法
1. printErrorLog(String httpMethod, String url, String httpCode, String returnText)
打印格式化的错误日志,包含请求方法、URL、HTTP状态码和返回文本。
- 参数:
httpMethod: HTTP方法url: 请求URLhttpCode: HTTP状态码returnText: 返回的错误文本
2. initHttpConnection(String url, String method)
为指定的 URL 和 HTTP 方法初始化 HttpURLConnection。
- 参数:
url:HTTP 请求的目标 URL。method:HTTP 方法(GET、POST、PUT、DELETE 等)。
- 返回值: 初始化的
HttpURLConnection对象。
示例:
HttpURLConnection conn = Base.initHttpConnection("https://api.example.com/data", "GET");
2. connect(HttpURLConnection conn)
使用提供的连接执行 HTTP 请求并返回响应。
- 参数:
conn:用于请求的HttpURLConnection对象。
- 返回值: 包含响应详情的
ResponseEntity对象。
示例:
HttpURLConnection conn = Base.initHttpConnection("https://api.example.com/data", "GET");
ResponseEntity response = Base.connect(conn);
3. connect(String url, String method, Consumer<HttpURLConnection> fn)
一个便捷方法,将初始化和连接合并为一个调用,并可选择自定义连接的函数。
- 参数:
url:HTTP 请求的目标 URL。method:HTTP 方法(GET、POST、PUT、DELETE 等)。fn:用于自定义连接的可选函数(例如,添加头信息)。
- 返回值: 包含响应详情的
ResponseEntity对象。
示例:
ResponseEntity response = Base.connect("https://api.example.com/data", "GET", conn -> {
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", "Bearer token123");
});
连接配置
Base 类设置了默认的连接参数:
- 连接超时:10 秒(10,000 毫秒)
- 读取超时:15 秒(15,000 毫秒)
这些超时确保在网络问题时请求不会无限期挂起。
错误处理
Base 类包含全面的错误处理:
-
对于 HTTP 响应代码 >= 400,它:
- 在
ResponseEntity中将ok标志设置为false - 检索错误流
- 记录错误详情
- 在
-
对于连接异常,它:
- 将
ok标志设置为false - 在
ResponseEntity中存储异常 - 记录异常详情
- 将
ResponseEntity
connect 方法返回包含以下内容的 ResponseEntity 对象:
- HTTP 响应代码
- 响应体(作为文本或输入流)
- 使用的 URL 和 HTTP 方法
- 请求时间信息
- 成功/失败状态
- 发生的任何异常
使用示例
以下是使用 Base 类进行 GET 请求的完整示例:
try {
ResponseEntity response = Base.connect("https://api.example.com/data", "GET", conn -> {
conn.setRequestProperty("Accept", "application/json");
});
if (response.isOk()) {
// 处理成功的响应
String responseText = StreamHelper.copyToString(response.getIn());
System.out.println("响应: " + responseText);
} else {
// 处理错误
System.err.println("错误: " + response.getHttpCode() + " - " + response.getResponseText());
}
} catch (Exception e) {
e.printStackTrace();
}
常量
ERR_MSG
错误消息的键名,值为"errMsg"。
结论
Base 类为 Java 应用程序中的 HTTP 请求提供了坚实的基础。它处理连接管理、错误处理和响应处理的底层细节,使您能够专注于应用程序的业务逻辑。对于特定的 HTTP 方法,请考虑使用基于 Base 构建的专用类,如 Get、Post 等。