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 实现非阻塞请求

三、使用示例------同步请求

java 复制代码
// 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());
    }
}

四、异步请求------回调方式

java 复制代码
// 异步请求(非阻塞)
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace(); // 处理失败
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String result = response.body().string();
            // 注意:此处非主线程,更新 UI 需切回主线程(Android)
        }
    }
});

五、拦截器示例------日志记录

java 复制代码
// 添加日志拦截器(需依赖 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/))

相关推荐
hhzz几秒前
Maven项目中settings.xml终极优化指南
java·jdk·maven
weixin_307779131 分钟前
C++进程监视器与自动启动程序
开发语言·c++·算法
草莓熊Lotso21 分钟前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day12
c语言·开发语言·c++·刷题
hqxstudying23 分钟前
MyBatis 和 MyBatis-Plus对比
java·数据库·mysql·mybatis
不喜欢学数学er31 分钟前
算法第五十三天:图论part04(第十一章)
开发语言·python·图论
源码哥_博纳软云32 分钟前
JAVA国际版多商户运营版商城系统源码多商户社交电商系统源码支持Android+IOS+H5
android·java·ios·微信·微信小程序·小程序·uni-app
你怎么知道我是队长41 分钟前
python---构造函数、析构函数
开发语言·python
猿java43 分钟前
为什么复杂的架构一定要做分层设计?
java·面试·架构
whitepure44 分钟前
万字详解常用数据结构(Java版)
java·数据结构·后端
天天摸鱼的java工程师1 小时前
你们公司的 QPS 是怎么统计出来的?这 5 种常见方法我踩过一半的坑
java·后端·面试