Java学习第九十一部分——OkHttp
目录
一、前言简介
二、核心特性
三、使用示例——同步请求
四、异步请求——回调方式
五、拦截器示例——日志记录
六、适用场景
七、优势总结
一、前言简介
OkHttp 是由 Square 公司开发的现代、高效、开源的 HTTP/HTTP2 客户端库,专为 Java(JVM)和 Android 平台设计。它简化了 HTTP 请求处理,支持同步/异步调用,并内置连接池、缓存、压缩等优化功能,是 Retrofit、Picasso 等流行库的底层网络引擎。
二、核心特性
特性 | 说明 |
---|---|
HTTP/2 支持 | 多路复用、头部压缩,显著提升并发性能 |
连接池 | 复用 TCP 连接,减少延迟(尤其适用于高频请求场景) |
透明压缩 | 自动处理 Gzip 压缩,减少数据传输量 |
缓存控制 | 可配置的响应缓存(遵循 HTTP 缓存规范) |
超时机制 | 支持连接/读取/写入超时设置,避免阻塞 |
拦截器 | 链式处理请求/响应(日志、重试、认证等),高度可扩展 |
自动重定向 | 自动处理 3xx 重定向,支持跨协议(如 HTTP→HTTPS) |
TLS 支持 | 支持 TLS 1.3、ALPN 等现代安全协议 |
异步回调 | 通过 Callback 实现非阻塞请求 |
三、使用示例——同步请求
// 1. 创建 OkHttpClient 实例
OkHttpClient client = new OkHttpClient();// 2. 构建请求
Request request = new Request.Builder().url("https://api.example.com/data").build();// 3. 同步执行请求
try (Response response = client.newCall(request).execute()) {if (response.isSuccessful()) {String responseData = response.body().string();System.out.println("响应数据: " + responseData);} else {System.out.println("请求失败: " + response.code());}
}
四、异步请求——回调方式
// 异步请求(非阻塞)
client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace(); // 处理失败}@Overridepublic void onResponse(Call call, Response response) throws IOException {if (response.isSuccessful()) {String result = response.body().string();// 注意:此处非主线程,更新 UI 需切回主线程(Android)}}
});
五、拦截器示例——日志记录
// 添加日志拦截器(需依赖 okhttp-logging-interceptor)
HttpLoggingInterceptor logger = new HttpLoggingInterceptor();
logger.setLevel(HttpLoggingInterceptor.Level.BASIC);OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logger) // 添加拦截器.build();
六、适用场景
-
移动端(Android)网络请求
-
微服务间 HTTP 通信
-
需要高效处理 API 调用的后端服务
-
需要灵活扩展网络层逻辑的应用
七、优势总结
✅ 性能卓越:连接池、HTTP/2 支持大幅提升吞吐量
✅ 可扩展性强:拦截器机制支持自定义逻辑(如 OAuth 认证)
✅ 健壮性高:自动重试、超时控制提升稳定性
✅ 社区活跃:持续更新维护,文档丰富([官方文档](https://square.github.io/okhttp/))