HTTP是現(xiàn)代應(yīng)用網(wǎng)絡(luò)交互數(shù)據(jù)信息和媒介影像的主要傳輸方式。更有效率的HTTP傳輸會使你的互聯(lián)網(wǎng)應(yīng)用加載更快,同時節(jié)省帶寬。
OkHttp是一個HTTP的客戶端,能夠有效地完成:
- 使用HTTP 2.0協(xié)議傳輸,所有請求使用同一個域名,共享一個socket。
- 如果HTTP2.0 不可用,通過連接池可以減少請求延遲
- 透明的GZIP壓縮減少了包下載的大小
- 響應(yīng)緩存避免了網(wǎng)絡(luò)重復(fù)請求
OkHttp堅(jiān)持認(rèn)為網(wǎng)絡(luò)環(huán)境是復(fù)雜混亂且問題不斷的。因此,他充分考慮了高可用,能夠自發(fā)地從連接問題中恢復(fù):
如果你的服務(wù)能夠提供多個IP地址,當(dāng)?shù)谝淮芜B接失敗后,OkHttp會嘗試連接備選IP地址,當(dāng)服務(wù)端是多數(shù)據(jù)中心架構(gòu)時,這種方式相當(dāng)有用。
OkHttp初始化新連接時采用的是新的TLS協(xié)議,比如SNI、ALPN,如果握手失敗,會降級為采用TLS 1.0協(xié)議。
使用OkHttp很簡單,API設(shè)計(jì)合理且不會輕易改變。同時支持同步阻塞式調(diào)用和異步回調(diào)函數(shù)調(diào)用。
版本支持:OkHttp支持安卓2.3及以上版本,JDK要求1.7及以上
下載及引用
要使用OkHttp,你需要同時支持Okio,用于快速IO和可調(diào)整的緩沖區(qū),最新Jar的下載地址這里寫鏈接內(nèi)容。
OkHttp代碼,實(shí)例,文檔都共享在Github上。
MAVEN地址
<dependency> <groupId>com.squareup.okhttp3<!--<="" span="">> <artifactId>okhttp<!--<="" span="">> <version>3.4.1<!--<="" span="">> <!--<="" span="">> ="">="">="">="">
GRADLE地址
compile 'com.squareup.okhttp3:okhttp:3.4.1'
實(shí)例
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 { //由于本機(jī)設(shè)置了上網(wǎng)代理,因此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,