OkHttp
OkHttp 是面向 JVM、Android 与 GraalVM 的高效 HTTP 客户端,默认支持 HTTP/2、连接池、GZIP 压缩与响应缓存,并提供同步与异步调用、WebSocket、SSE 等能力。
爱鲜报评分
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 模块提供了示例构建方式。
评论
- 暂无评论,来写第一条吧。