HttpClient详解 🌐
Feat HttpClient 是一个功能强大、灵活且高效的 HTTP 客户端库,旨在帮助开发者轻松发送 HTTP 请求、处理响应,并支持多种高级功能。它支持常见的 HTTP 方法(如 GET、POST、PUT、DELETE 等),并提供了灵活的配置选项,以满足不同场景下的需求。
Feat HttpClient 的设计理念注重性能、易用性和扩展性,能够与 Feat 框架的其他组件无缝集成,为开发者提供一致的开发体验。
快速上手
引入依赖
在 Maven 项目中,添加以下依赖到 pom.xml
:
<dependency> <groupId>tech.smartboot.feat</groupId> <artifactId>feat-core</artifactId> <version>${feat.version}</version></dependency>
发送第一个 GET 请求
以下是一个简单的示例,展示了如何使用 Feat HttpClient 发送 GET 请求并处理响应:
import tech.smartboot.feat.core.client.HttpClient;import java.io.IOException;
public class HttpClientDemo { public static void main(String[] args) throws IOException { // 创建 HttpClient 实例 HttpClient client = new HttpClient("https://www.baidu.com");
// 发送 GET 请求 client.get().onSuccess(response -> { // 处理响应 System.out.println("Status Code: " + response.statusCode()); System.out.println("Body: " + response.body()); }).done(); }}
HttpClient 实例化
HttpClient 提供了 2 种实例化方式:
方式一:完整的请求URL
HttpClient client = new HttpClient("http://127.0.0.1:8080");
HttpClient client = new HttpClient("https://smartboot.tech/feat/");
该种方式会自动解析 URL 中的 host 和 port 信息,并识别是否使用 HTTPS 协议。
方式二:指定 host、port
HttpClient httpClient = new HttpClient("127.0.0.1", 8080);
HttpClient httpClient = new HttpClient("smartboot.tech", 443);
Options 配置
通过 HttpClient.options() 方法提供了客户端的配置选项,支持链式调用。
host
类型: String
默认值: null
服务地址,必填
port
类型: int
默认值: 80
服务端口
connectTimeout
类型: int
默认值: 0
连接超时时间,单位毫秒
readBufferSize
类型: int
默认值: 1024
读缓冲区大小,单位:字节。合理的大小可以减少系统调用次数,提高性能。
writeBufferSize
类型: int
默认值: 1024
写缓冲区大小,单位:字节。合理的大小可以减少系统调用次数,提高性能。
debug
类型: boolean
默认值: false
是否开启调试模式。启用后会在控制台打印请求和响应的详细信息。
proxy
类型: ProxyOptions
默认值: null
代理配置。
HTTP请求
HttpClient 提供了 rest() 方法用于发送通用的 HTTP 请求。rest() 方法的参数包括:
- method: HTTP 请求方法,如 GET、POST、PUT、DELETE 等。
- path: 请求路径,如 /api/user。
请求构造完毕后,需要调用 submit() 方法发送请求。
public class HttpRestDemo { public static void main(String[] args) throws IOException { // 创建 HttpClient 实例 HttpClient client = new HttpClient("https://smartboot.tech"); client.options().debug(true); // 发送 GET 请求 client.rest(HttpMethod.GET, "/feat/").onSuccess(response -> { System.out.println("Status Code: " + response.statusCode()); System.out.println("Body: " + response.body()); }).submit(); }}
对于 GET、POST 等常见的 HTTP 请求方法,HttpClient 提供了对应的方法,如 get()、post() 等,例如:
public class HttpGetDemo { public static void main(String[] args) { HttpClient httpClient = new HttpClient("https://smartboot.tech"); httpClient.get("/feat/") .onSuccess(response -> System.out.println(response.body())) .onFailure(Throwable::printStackTrace) .submit(); }}
异步回调
HttpClient 提供了异步回调机制,可以在请求发送后立即返回,而不需要等待请求完成。
onResponseHeader
当响应 Header 解析完成后,会触发 onResponseHeader 回调。
public class ResponseHeaderDemo { public static void main(String[] args) { HttpClient httpClient = new HttpClient("https://smartboot.tech"); httpClient.get("/feat/") .onResponseHeader(response -> { for (String name : response.getHeaderNames()) { System.out.println(name + ": " + response.getHeader(name)); } }) .submit(); }}
onResponseBody
对于存在响应体的请求,当onResponseHeader
回调结束并开始接收到Body内容时,会触发 onResponseBody 回调。
public class ResponseBodyDemo { public static void main(String[] args) { HttpClient httpClient = new HttpClient("https://smartboot.tech"); httpClient.get("/feat/") .onResponseBody(new Stream() { @Override public void stream(HttpResponse response, byte[] bytes, boolean end) throws IOException { System.out.println("接收到数据:" + new String(bytes)); if (end) { System.out.println("数据接收完毕"); } } }) .submit(); }}
onResponseBody 的参数是一个 Stream 对象,用于消费响应体的内容:
- response: HttpResponse 对象,表示当前的响应。
- bytes: 字节数组,表示接收到的响应体内容。
- end: boolean 值,表示是否接收到了响应体的最后一部分内容。
onSuccess
当请求成功时,会触发 onSuccess 回调。该回调发生于 onResponseBody 正常结束之后。
onFailure
当请求失败时,会触发 onFailure 回调。