AX 爱鲜报

OkHttp

OkHttp 是面向 JVM、Android 与 GraalVM 的高效 HTTP 客户端,默认支持 HTTP/2、连接池、GZIP 压缩与响应缓存,并提供同步与异步调用、WebSocket、SSE 等能力。

爱鲜报评分

0.0

0 人评分

47k

星数

否

中文

Kotlin

主语言

是

活跃

357

贡献者

人工分析

EDITORIAL

推荐理由

OkHttp 是 Java 与 Android 生态中最主流的 HTTP 客户端之一,遵循多项现代 HTTP 规范,稳定性和兼容性经过大规模生产验证。它默认开启连接复用、缓存与压缩,能显著降低延迟和带宽消耗,并内置 MockWebServer 方便测试。对于需要可靠网络层的 Android 或后端 Java 项目,几乎是默认选择。

适用场景

  • Android 应用网络请求
  • Java 后端服务调用第三方 API
  • 需要 HTTP/2、WebSocket 或 SSE 的客户端
  • HTTP 客户端单元测试(MockWebServer)
  • GraalVM 原生镜像应用

优点

  • 默认高效:HTTP/2 多路复用、连接池、透明 GZIP、响应缓存
  • 网络容错强:多 IP 重试、TLS 1.3、ALPN、证书固定
  • API 设计简洁,支持同步阻塞与异步回调
  • 遵循 RFC 9110/9111/9112/9113 等现代 HTTP 规范
  • 生态成熟,文档完善,社区规模大

缺点

  • 有意限制可配置性,不适用于需要构造非法请求的场景
  • 不允许带 body 的 GET 请求
  • 缓存不是可替换的接口实现
  • Android 上需注意初始化与版本更新以保障 TLS 安全
上手难度 入门

OkHttp 简介

OkHttp 是一个面向 JVM、Android 和 GraalVM 的高效 HTTP 客户端。HTTP 是现代应用交换数据与媒体的基础,OkHttp 的目标是让网络请求更快、更省带宽。

默认就高效

  • HTTP/2 支持:同一主机的多个请求可共享一个 socket。
  • 连接池:在无法使用 HTTP/2 时降低请求延迟。
  • 透明 GZIP:自动压缩下载体积。
  • 响应缓存:重复请求可完全避免走网络。

网络不稳定时也能恢复

OkHttp 能从常见连接问题中静默恢复。若服务有多个 IP 地址,首次连接失败时会尝试备用地址,这对 IPv4+IPv6 及多数据中心部署很重要。它支持 TLS 1.3、ALPN、证书固定等现代 TLS 特性。

简单易用的 API

请求/响应 API 采用流式构建器与不可变设计,同时支持同步阻塞调用和带回调的异步调用。

OkHttpClient client = new OkHttpClient();

String run(String url) throws IOException {
  Request request = new Request.Builder()
      .url(url)
      .build();

  try (Response response = client.newCall(request).execute()) {
    return response.body().string();
  }
}

发送 JSON 数据同样简洁:

public static final MediaType JSON = MediaType.get("application/json");

RequestBody body = RequestBody.create(json, JSON);
Request request = new Request.Builder()
    .url(url)
    .post(body)
    .build();

规范的 HTTP 实现

OkHttp 遵循 HTTP 语义(RFC 9110)、HTTP 缓存(RFC 9111)、HTTP/1.1(RFC 9112)、HTTP/2(RFC 9113)、WebSocket(RFC 6455)以及 SSE 等规范。在规范不明确处,它会参考主流浏览器和常见 HTTP 库的行为。

它有意避免过度可配置,例如不允许带 body 的 GET 请求,缓存也不是可替换的接口实现。

环境要求与依赖

  • 支持 Android 5.0+(API 21+)和 Java 8+。
  • 依赖 Okio 进行高性能 I/O,并依赖 Kotlin 标准库。
  • 使用平台内置 TLS 实现;在 Java 平台也可选用 Conscrypt。

发布与测试

OkHttp 以 Kotlin Multiplatform 项目发布,Gradle 项目可直接引入:

implementation("com.squareup.okhttp3:okhttp:5.5.1")

同时提供 BOM 帮助统一版本。项目还内置 MockWebServer,用于测试 HTTP、HTTPS 和 HTTP/2 客户端:

testImplementation("com.squareup.okhttp3:mockwebserver3:5.5.1")

GraalVM 原生镜像

使用 GraalVM 构建原生镜像可自动工作,仓库中的 okcurl 模块提供了示例构建方式。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。