OkHttp for Java: 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

OkHttp for Java:新一代 HTTP 客户端

\n\n

1. 什么是 OkHttp 以及为什么需要它

\n\n

OkHttp 是由 Square 公司开发的一款适用于 Java 和 Android 的现代、高效的 HTTP 库。它已成为 Android 生态系统中执行网络请求的事实标准,并广泛应用于服务器端 Java 应用程序。OkHttp 提供了简洁、流畅的 API 用于发送 HTTP 请求和接收响应,支持该协议的所有现代特性:HTTP/2、WebSockets、GZIP 压缩、响应缓存以及故障时的自动连接恢复。

\n\n

既然有标准的 java.net.HttpURLConnection,为什么还需要 OkHttp?首先,OkHttp 使用起来要简单得多——无需繁琐的连接配置结构,您只需创建请求并执行即可。其次,该库“开箱即用”地解决了许多问题:自动处理重定向、管理连接池以重复使用、支持透明的 GZIP 压缩,并且能够缓存响应以节省流量。第三,OkHttp 是 Retrofit 和 Picasso 等流行库的基础,这使其成为 Android 开发人员不可或缺的工具。

\n\n

OkHttp 非常适合任何需要与 REST API 交互、文件上传、WebSockets 或仅执行 HTTP 请求的 Java 项目。由于支持 HTTP/2,该库允许通过单个连接复用请求,这大大加快了与现代服务器的交互速度。4.x 及更高版本已完全用 Kotlin 重写,但保留了与 Java 代码的完全向后兼容性,使其可供所有 Java 开发人员使用。

\n\n

2. 安装

\n\n

OkHttp 通过 Maven Central 分发。要将该库添加到您的项目中,请在 build.gradle(适用于 Gradle)或 pom.xml(适用于 Maven)文件中添加依赖项。

\n\n

Gradle(Android / Java 项目)

\n
dependencies {\n    implementation 'com.squareup.okhttp3:okhttp:4.12.0'\n    // 用于请求日志记录(可选)\n    implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'\n}
\n\n

Maven

\n
<dependency>\n    <groupId>com.squareup.okhttp3</groupId>\n    <artifactId>okhttp</artifactId>\n    <version>4.12.0</version>\n</dependency>
\n\n

对于 Java 模块(无 Gradle/Maven)

\n

从 Maven Central 下载 JAR 文件并将其添加到项目的 classpath 中。

\n\n

重要提示: OkHttp 4.x 需要 Java 8+ 或 Android API 21+。对于旧版本,请使用 OkHttp 3.x。

\n\n

3. 快速入门——最小工作示例

\n\n

最简单的示例是执行 GET 请求并将响应体输出到控制台。创建一个 Main.java 类并复制以下代码:

\n\n
import okhttp3.OkHttpClient;\nimport okhttp3.Request;\nimport okhttp3.Response;\nimport java.io.IOException;\n\npublic class Main {\n    public static void main(String[] args) {\n        // 1. 创建 HTTP 客户端(通常整个应用共享一个)\n        OkHttpClient client = new OkHttpClient();\n\n        // 2. 构建请求\n        Request request = new Request.Builder()\n                .url("https://api.github.com/users/octocat")\n                .get()\n                .build();\n\n        // 3. 同步执行请求(会阻塞线程)\n        try (Response response = client.newCall(request).execute()) {\n            if (response.isSuccessful()) {\n                System.out.println("响应: " + response.body().string());\n            } else {\n                System.err.println("错误: " + response.code());\n            }\n        } catch (IOException e) {\n            e.printStackTrace();\n        }                    

推荐