HTTP是現代應用網絡交互數據信息和媒介影像的主要傳輸方式。更有效率的HTTP傳輸會使你的互聯網應用加載更快,同時節(jié)省帶寬。
OkHttp是一個HTTP的客戶端,能夠有效地完成:
-
使用HTTP 2.0協(xié)議傳輸,所有請求使用同一個域名,共享一個socket。
-
如果HTTP2.0 不可用,通過連接池可以減少請求延遲
-
透明的GZIP壓縮減少了包下載的大小
-
響應緩存避免了網絡重復請求
OkHttp堅持認為網絡環(huán)境是復雜混亂且問題不斷的。因此,他充分考慮了高可用,能夠自發(fā)地從連接問題中恢復:
如果你的服務能夠提供多個IP地址,當第一次連接失敗后,OkHttp會嘗試連接備選IP地址,當服務端是多數據中心架構時,這種方式相當有用。
OkHttp初始化新連接時采用的是新的TLS協(xié)議,比如SNI、ALPN,如果握手失敗,會降級為采用TLS 1.0協(xié)議。
使用OkHttp很簡單,API設計合理且不會輕易改變。同時支持同步阻塞式調用和異步回調函數調用。
版本支持:OkHttp支持安卓2.3及以上版本,JDK要求1.7及以上
下載及引用
要使用OkHttp,你需要同時支持Okio,用于快速IO和可調整的緩沖區(qū),最新Jar的下載地址這里寫鏈接內容。
OkHttp代碼,實例,文檔都共享在Github上。
MAVEN地址
<dependency> <groupId>com.squareup.okhttp3<!--> <artifactId>okhttp<!--> <version>3.4.1<!--> <!-->
GRADLE地址
compile 'com.squareup.okhttp3:okhttp:3.4.1'
實例
Get請求
package com.suning.okhttpdemo; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class GetUrlDemo { String run(String url) throws IOException { //由于本機設置了上網代理,因此OkHttp請求需要綁定代理 InetSocketAddress addr = new InetSocketAddress("10.19.110.55", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
OkHttpClient client = new OkHttpClient.
Builder().proxy(proxy).build();
Request request = new Request.Builder()
.url(url)
.build(); try (Response response = client.newCall(request).execute()) { return response.body().string();
}
} public static void main(String[] args) throws IOException {
GetUrlDemo demo = new GetUrlDemo();
String reponse = demo.run("http://www.jd.com/");
System.out.println(reponse);
}
}
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
Post請求
package okhttp3.guide;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; public class PostExample { public static final MediaType JSON
= MediaType.parse("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();
}
} String bowlingJson(String player1,