HTTP 是现代应用程序联网交换数据和信息的主要方式。高效地使用HTTP不仅使您的内容加载更快,而且能节省带宽。
OkHttp是一个实现HTTP协议的客户端库,完美的支持如下特性:
当网络信号不好的时候,OkHttp不会立刻返回请求错误,它会通过连接池进行多次请求。如果您的服务有多个IP地址,第一次连接失败,OkHttp将尝试替换IP地址,再次请求。这个特点对于拥有IPv4+IPv6和托管在冗余数据中心中的服务是非常友好的。OkHttp支持现代TLS功能(TLS 1.3、ALPN、Certificate Pinning)。你还可通过修改OkHttp的配置,来兼容之前的版本。
下面这段程序片段演示如何请求一个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();
}
}
下面这段程序片段演示如何向服务器提交数据。
public static final MediaType JSON
= MediaType.get("application/json; charset=utf-8");
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 Recipes page
OkHttp适用于Android 5.0+(API级别21+)和Java 8+
OkHttp通过Okio和Kotlin标准库实现高性能I/O。两者都是小型库,而且具有很强的向后兼容性。
我们强烈建议您像自动更新web浏览器一样,不断更新OkHttp 版本,使用Okhttp的最新版本,因为这是HTTPS客户端防止潜在安全问题的重要防御措施。We track 会动态跟踪TLS生态系统,并不断调整OkHttp以提高其连通性和安全性。
OkHttp实现了系统内置的TLS功能。在Java平台上,OkHttp还支持Conscrypt,Conscrypt集成了BoringSSL和Java 。OkHttp之所以支持Conscrypt,因为它是第一个安全提供商:
Security.insertProviderAt(Conscrypt.newProvider(), 1);
OkHttp 3.12.x分支支持Android 2.3+(API级别9+)和Java 7+。这些平台缺乏对TLS 1.2的支持,不建议使用。但由于升级很困难,我们将在2021 12月31日之前对3.12.x分支进行关键修复。
历史版本请看 change log
最新的版本已经上传到 Maven Central
implementation("com.squareup.okhttp3:okhttp:4.10.0")
Snapshot ,R8 and ProGuard 也都能用.
另外,我们有一个可用的 bill of materials (BOM),它的作用是帮助您实时更新 OkHttp 版本进而保证OkHttp的兼容性.
dependencies {
// define a BOM and its version
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.10.0"))
// define any required OkHttp artifacts without version
implementation("com.squareup.okhttp3:okhttp")
implementation("com.squareup.okhttp3:logging-interceptor")
}
OkHttp还有一个 HTTP, HTTPS, 和HTTP/2 测试库.
它最新的版本已经上传到 Maven Central.
testImplementation("com.squareup.okhttp3:mockwebserver:4.10.0")
使用Graal构建您的本地图像https://www.graalvm.org/是支持的。不过只有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
http://www.apache.org/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.
英文原文