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

相关推荐
lizhihai_9914 小时前
股市学习心得-六张分时保命图
大数据·人工智能·学习
我星期八休息14 小时前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
热心网友俣先生14 小时前
2026年第二十三届五一数学建模竞赛C题超详细解题思路+各问题可用模型推荐+部分模型结果展示
c语言·开发语言·数学建模
01漫游者14 小时前
JavaScript函数与对象增强知识
开发语言·javascript·ecmascript
GottdesKrieges14 小时前
OceanBase恢复常见问题
java·数据库·oceanbase
IGAn CTOU14 小时前
Java高级开发进阶教程之系列
java·开发语言
leo825...14 小时前
Claude Code Skills 清单(本地)
java·python·ai编程
csbysj202015 小时前
SQL NULL 函数详解
开发语言
其实防守也摸鱼15 小时前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
NGSI vimp15 小时前
Java进阶——如何查看Java字节码
java·开发语言