概述
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")