OkHttp:Square 出品的 Java/Android HTTP 客户端

做 Java 或 Android 开发的人,基本都绕不开网络请求。原生 HttpURLConnection 用起来繁琐,自己封装又容易出各种边界问题。Square 公司开源的 OkHttp,就是专门解决这个问题的 HTTP 客户端库,目前在 GitHub 上有 4.7 万 Star。

正文顶部截图

做了哪些事

OkHttp 的设计目标很明确:让 HTTP 请求更高效、更可靠。

效率方面,它默认支持 HTTP/2,同一个主机的多个请求可以复用同一个 TCP 连接。如果服务端不支持 HTTP/2,它会自动退回到连接池模式,减少握手开销。响应体默认开启 GZIP 压缩,重复请求还能走本地缓存,省掉网络开销。

可靠性方面,当网络不稳定时,OkHttp 会自动处理常见的连接问题。如果某个服务有多个 IP 地址,第一个连不上会自动尝试下一个,这对 IPv4/IPv6 双栈和多数据中心部署的场景很实用。TLS 方面支持 TLS 1.3、ALPN 和证书锁定。

接口设计

OkHttp 的 API 风格是 Builder 模式加不可变对象。一个 GET 请求写下来就几行:

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
try (Response response = client.newCall(request).execute()) {
    return response.body().string();
}

POST 请求类似,构造一个 RequestBody 塞进去就行。同步和异步两种调用方式都支持,异步走回调。

README区域截图

遵循规范

OkHttp 严格遵循 HTTP 相关的 RFC 标准,包括 HTTP 语义(RFC 9110)、缓存(RFC 9111)、HTTP/1.1(RFC 9112)、HTTP/2(RFC 9113)、WebSocket(RFC 6455)和 SSE。当规范有歧义时,它参考主流浏览器和常见 HTTP 库的行为。

这种"有原则"的设计也带来了一些限制,比如不允许 GET 请求带 body,缓存也不是可替换的接口。对大多数业务场景来说,这些限制不是问题。

兼容性和依赖

OkHttp 支持 Android 5.0+(API 21)和 Java 8+。它依赖 Okio 做高性能 I/O,依赖 Kotlin 标准库,两个都是小体量的库,向后兼容性好。

安全方面,OkHttp 使用平台内置的 TLS 实现。在 Java 平台上还支持 Conscrypt,把 BoringSSL 集成进来,加一行代码就能启用。官方建议保持版本更新,毕竟 HTTPS 客户端的安全补丁不能拖。

测试支持

项目自带 MockWebServer,可以模拟 HTTP/HTTPS/HTTP/2 服务端,用于测试。不过官方说明这个库主要用于内部测试和基础场景,功能有限,复杂需求建议用 MockServer 这类专业工具。

构建方面,OkHttp 已经是 Kotlin Multiplatform 项目,Maven 用户需要注意选 okhttp-jvm 或 okhttp-android。Gradle 用户直接用 BOM 管理版本就行,官方给了现成的配置示例。还支持 GraalVM Native Image 和 Java 9 Modules。

一句话总结

如果你在做 Java 或 Android 的网络层,OkHttp 是目前最成熟的选择之一。API 设计干净,性能和可靠性经过大量生产验证,Square 的维护也一直在线。

目前最成熟的选择之一。API 设计干净,性能和可靠性经过大量生产验证,Square 的维护也一直在线。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐