概述

HTTP是一种现代应用网络. 它是我们交换数据和媒体的方式。高效的HTTP可以让你的资源加载更快,而且更节省带宽。

OkHttp 是一个高效的HTTP客户端, 默认支持以下特性:

  • HTTP/2支持所有相同host的请求共享同一个socket
  • 连接池减少请求延迟(如果HTTP/2不可用的话)
  • GZIP传输减少资源下载大小
  • 响应缓存, 避免网络重复请求

当网络遇到问题, OkHttp延迟请求: 它会再次请求当网络问题恢复。如果你的服务有多个IP地址,当第一个链接失败后OkHttp将会替换另外一个地址重试。这是有必要的,对于混合IPv4和IPv6的服务地址,或者服务部署在多个数据中心时。OkHttp支持现代TLS特性(TLS 1.3 ALPN, certificate pinning)。

OkHttp使用很容易。它的请求响应API被设计成流式构建(fluent builder),而且是不可变的。同时支持同步阻塞调用和异步回调方式调用。

Get请求#

下面这个程序会从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; 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查看更多示例。

Releases#

OkHttp的最新发布版本查看 Maven Central:

pom.xml
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
implementation("com.squareup.okhttp3:okhttp:4.9.0")

MockWebServer#

OkHttp包含了一个测试HTTP, HTTPS 和 HTTP/2 客户端的类库。

最新版本访问 Maven Central:

testImplementation("com.squareup.okhttp3:mockwebserver:4.9.0")

原文 - OkHttp