面向 Android 和 Java 的类型安全 HTTP 客户端,通过注解接口方法发起网络请求。
lysine-dev/okhttp
面向 JVM、Android 和 GraalVM 的 HTTP 客户端,默认支持连接复用、HTTP/2 和响应缓存。
- Star
- 47,090
- Fork
- 9,298
- 未关闭 Issue
- 148
- 最近提交
- 8小时前
这是什么?
OkHttp 是一个用于 Java、Kotlin 和 Android 应用的 HTTP 客户端。默认情况下它就注重效率:同一主机的请求可以通过 HTTP/2 共享一个连接,不支持 HTTP/2 时则使用连接池复用连接,响应会自动解压 GZIP,重复请求还可以直接从缓存返回,不必访问网络。
在网络不稳定的情况下,OkHttp 也能自动恢复常见的连接问题。服务有多个 IP 地址时,首选地址连接失败后会尝试其他地址。它支持 TLS 1.3、ALPN 和证书固定,API 采用链式构建器与不可变的请求、响应对象,同时支持同步调用和带回调的异步调用。
项目遵循 RFC 9110 至 9113、WebSocket 和 Server-Sent Events 等 HTTP 规范,并提供协程、日志、SSE、DNS over HTTPS 等扩展模块,以及用于测试客户端的 MockWebServer。它支持 Android 5.0 及以上和 Java 8 及以上,也可以构建为 GraalVM 原生镜像。
核心功能
- 01连接池与 HTTP/2 多路复用,减少对同一主机的重复请求延迟。
- 02自动解压 GZIP,并通过响应缓存避免重复下载。
- 03连接失败时自动尝试同一服务的其他 IP 地址。
- 04支持 TLS 1.3、ALPN 和证书固定,Java 平台可使用 Conscrypt。
- 05同时提供同步与异步调用接口,请求和响应对象不可变。
- 06附带 MockWebServer,用于测试 HTTP、HTTPS 和 HTTP/2 客户端。
适用场景
- 在 Java、Kotlin 或 Android 应用中调用 REST 或 JSON 接口。
- 下载大体积媒体或文件,借助压缩和缓存节省带宽。
- 使用 GraalVM 构建原生命令行 HTTP 工具。
- 基于模拟 HTTP 服务器编写集成测试。
快速上手
- 1
在 Gradle 构建中添加 OkHttp 依赖
implementation("com.squareup.okhttp3:okhttp:5.5.0") - 2
创建 OkHttpClient 并使用 README 中的 Get a URL 示例发送请求
使用前须知
- 不允许带请求体的 GET 请求。
- 响应缓存不是接口,无法替换为其他实现。
- 在 Maven 项目中必须选择 okhttp-jvm 或 okhttp-android,因为 okhttp 构件在 Maven 中为空。
标签
常见问题
- okhttp 是什么?
- 面向 JVM、Android 和 GraalVM 的 HTTP 客户端,默认支持连接复用、HTTP/2 和响应缓存。 OkHttp 是一个用于 Java、Kotlin 和 Android 应用的 HTTP 客户端。默认情况下它就注重效率:同一主机的请求可以通过 HTTP/2 共享一个连接,不支持 HTTP/2 时则使用连接池复用连接,响应会自动解压 GZIP,重复请求还可以直接从缓存返回,不必访问网络。
- okhttp 可以免费使用吗?用的什么许可证?
- okhttp 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
- okhttp 还在维护吗?
- 活跃维护中。okhttp 最近一次提交是在 2026年10月21日。
- okhttp 适合用来做什么?
- 在 Java、Kotlin 或 Android 应用中调用 REST 或 JSON 接口。 下载大体积媒体或文件,借助压缩和缓存节省带宽。 使用 GraalVM 构建原生命令行 HTTP 工具。 基于模拟 HTTP 服务器编写集成测试。
- okhttp 怎么安装和运行?
- 在 Gradle 构建中添加 OkHttp 依赖: implementation("com.squareup.okhttp3:okhttp:5.5.0") 创建 OkHttpClient 并使用 README 中的 Get a URL 示例发送请求
- 在哪里获取 okhttp?
- 源代码和安装说明在 GitHub 上:https://github.com/lysine-dev/okhttp
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
用 C 编写的高性能 Web 服务器,兼具反向代理、负载均衡、API 网关和内容缓存功能。
一款支持 TLS 的交互式拦截 HTTP 代理,提供终端、命令行和 Web 三种界面,用于查看 HTTP/1、HTTP/2 和 WebSocket 流量。
一款命令行工具,用于从服务器提取 TLS/SSL 证书,并导出为 PEM、DER 或信任库格式。
用 Go 编写的自托管隧道工具,通过你自己的域名和服务器将本地服务暴露到公网。
Apache Dubbo 的 Java 实现,一个用于构建 RPC 通信与微服务的框架。