OkHttp¶
HTTP 是现代应用联网的方式。它是我们交换数据和媒体的方式。高效地执行 HTTP 可以让你的内容加载得更快,并节省带宽。
OkHttp 是一个默认高效的 HTTP 客户端
- 支持 HTTP/2 允许所有对同一主机的请求共享一个套接字。
- 连接池减少请求延迟(如果 HTTP/2 不可用)。
- 透明的 GZIP 压缩减小下载大小。
- 响应缓存对于重复请求完全避免网络访问。
当网络出现问题时,OkHttp 会坚持不懈:它会静默地从常见的连接问题中恢复。如果你的服务有多个 IP 地址,如果第一次连接失败,OkHttp 会尝试备用地址。这对于 IPv4+IPv6 和部署在冗余数据中心的服务是必需的。OkHttp 支持现代 TLS 特性(TLS 1.3、ALPN、证书锁定)。它可以配置为后退以实现广泛的连接性。
使用 OkHttp 非常简单。它的请求/响应 API 设计采用了流式的构建器和不可变性。它同时支持同步阻塞调用和带有回调的异步调用。
获取 URL¶
此程序下载一个 URL 并将其内容打印为字符串。完整源代码。
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();
}
}
POST 请求到服务器¶
此程序向服务 POST 数据。完整源代码。
public static final MediaType JSON = MediaType.get("application/json");
OkHttpClient client = new OkHttpClient();
String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(json, JSON);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
更多示例请参阅OkHttp 使用示例页面。
要求¶
OkHttp 适用于 Android 5.0+ (API level 21+) 和 Java 8+。
OkHttp 依赖于Okio以实现高性能 I/O 以及Kotlin 标准库。两者都是小型库,具有强大的向后兼容性。
我们强烈建议您保持 OkHttp 的更新。就像自动更新的网页浏览器一样,与 HTTPS 客户端保持同步是防范潜在安全问题的重要手段。我们跟踪动态的 TLS 生态系统并调整 OkHttp 以改善连接性和安全性。
OkHttp 使用您平台的内置 TLS 实现。在 Java 平台上,OkHttp 也支持Conscrypt,它集成了BoringSSL与 Java。如果 Conscrypt 是第一个安全提供者,OkHttp 将使用它。
Security.insertProviderAt(Conscrypt.newProvider(), 1);
OkHttp 3.12.x
分支支持 Android 2.3+ (API level 9+) 和 Java 7+。这些平台缺乏对 TLS 1.2 的支持,不应被使用。
发布版本¶
我们的变更日志包含发布历史。
最新发布版本可在Maven Central上获取。
implementation("com.squareup.okhttp3:okhttp:4.12.0")
快照构建版本可用。R8 和 ProGuard 规则可用。
此外,我们还提供了一个材料清单 (BOM),以帮助您保持 OkHttp artifacts 最新并确保版本兼容性。
dependencies {
// define a BOM and its version
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.12.0"))
// define any required OkHttp artifacts without version
implementation("com.squareup.okhttp3:okhttp")
implementation("com.squareup.okhttp3:logging-interceptor")
}
MockWebServer¶
OkHttp 包含一个用于测试 HTTP、HTTPS 和 HTTP/2 客户端的库。
最新发布版本可在Maven Central上获取。
testImplementation("com.squareup.okhttp3:mockwebserver:4.12.0")
GraalVM Native Image¶
使用 Graal https://graalvm.java.net.cn/ 构建原生镜像应该会自动工作。目前这还不是最终发布的版本,因此应使用 5.0.0-alpha.2
。请报告您发现的任何错误或变通方法。
请参阅 okcurl 模块以获取示例构建。
$ ./gradlew okcurl:nativeImage
$ ./okcurl/build/graal/okcurl https://httpbin.org/get
许可证¶
Copyright 2019 Square, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://apache.ac.cn/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.