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/))

相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔5 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨7 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117769 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao9 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区9 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大10 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf