OkHttp3-基本用法

轉(zhuǎn)載請(qǐng)注明出處 http://www.reibang.com/p/7919cd2685d3 (作者:韓棟)
本文為譯文,由于譯者水平有限憔儿,歡迎拍磚忆植,讀者也可以閱讀原文
【OkHttp3-基本用法,OkHttp3-使用進(jìn)階(Recipes)谒臼,OkHttp3-請(qǐng)求器(Calls)朝刊,OkHttp3-連接(Connections)OkHttp3-攔截器(Interceptor)


OkHttp

一個(gè)支持Http和Http/2蜈缤,可適用于Android以及Java應(yīng)用的網(wǎng)絡(luò)請(qǐng)求客戶端拾氓。

概述

Http是現(xiàn)代網(wǎng)絡(luò)應(yīng)用的所常用的協(xié)議,它是一種數(shù)據(jù)傳輸?shù)拿浇榈赘纭?zhí)行高效的Http代碼可以讓應(yīng)用程序以更快的加載速度以及更少的帶寬去請(qǐng)求數(shù)據(jù)咙鞍。
OkHttp是一種高效的Http請(qǐng)求客戶端,通常情況下它擁有以下特點(diǎn):

  • 當(dāng)同時(shí)向同一個(gè)主機(jī)發(fā)送大量請(qǐng)求時(shí)趾徽,Http/2允許并支持共用一個(gè)Socket。
  • 連接池的存在可以有效減少請(qǐng)求的所需的準(zhǔn)備工作
  • 可自動(dòng)壓縮下載數(shù)據(jù),降低下載數(shù)據(jù)的大小
  • 自動(dòng)緩存響應(yīng)數(shù)據(jù)事示,可以避免每次都通過(guò)網(wǎng)絡(luò)去請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)

OkHttp可以在請(qǐng)求出現(xiàn)問(wèn)題時(shí) 堅(jiān)守 靈活處理:針對(duì)于常見(jiàn)的連接問(wèn)題臀脏,OkHttp會(huì)默認(rèn)自動(dòng)幫應(yīng)用做修復(fù)處理。如果你的服務(wù)器有多個(gè)IP地址,OkHttp將會(huì)在請(qǐng)求失敗時(shí)芳来,不斷嘗試連接另外的IP地址挎袜。當(dāng)服務(wù)器同時(shí)支持IPv4+IPv6,或者主機(jī)服務(wù)器出現(xiàn)數(shù)據(jù)故障時(shí)嗦明,這是非常有用的诗良。如果握手失敗,OkHttp會(huì)自動(dòng)初始化一個(gè)帶有TLS(SNI, ALPN)協(xié)議的新連接向支持TLS 1.0的服務(wù)器再次發(fā)起請(qǐng)求总处。

OkHttp的用法是非常簡(jiǎn)單的。OkHttp的請(qǐng)求/響應(yīng)的Api被設(shè)計(jì)成建造者模式 菱肖,并且它擁有不變性遇绞。它既可以在主線程中調(diào)用相應(yīng)的閉包,也可以在子線程中去回調(diào)相應(yīng)方法蚜迅。

OkHttp支持Android 2.3以上的版本刹帕。對(duì)于Java 應(yīng)用,最小版本需要JDK 1.7以上。

下載

okhttp-3.8.0.jar包下載鏈接
如果你通過(guò)向應(yīng)用導(dǎo)入Jar包的方式集成,你必須同時(shí)集成Okio,Okio為OkHttp提供了快速的I/O操作以及可調(diào)整大小的緩存區(qū)。

MAVEN

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.8.0</version>
</dependency>

GRADLE

compile 'com.squareup.okhttp3:okhttp:3.8.0'

范例

通過(guò)Get方法去請(qǐng)求一個(gè)URL

下面的代碼通過(guò)一個(gè)URL去下載一個(gè)文本熊镣,并且打印出文本內(nèi)容鬼吵。

public class GetExample {
  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 void main(String[] args) throws IOException {
    GetExample example = new GetExample();
    String response = example.run("https://raw.github.com/square/okhttp/master/README.md");
    System.out.println(response);
  }
}

通過(guò)Post方法向服務(wù)器傳遞數(shù)據(jù)

下面代碼展示了向服務(wù)器上傳數(shù)據(jù)的操作。

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, String player2) {
    return "{'winCondition':'HIGH_SCORE',"
        + "'name':'Bowling',"
        + "'round':4,"
        + "'lastSaved':1367702411696,"
        + "'dateStarted':1367702378785,"
        + "'players':["
        + "{'name':'" + player1 + "','history':[10,8,6,7,8],'color':-13388315,'total':39},"
        + "{'name':'" + player2 + "','history':[6,10,5,10,10],'color':-48060,'total':41}"
        + "]}";
  }

  public static void main(String[] args) throws IOException {
    PostExample example = new PostExample();
    String json = example.bowlingJson("Jesse", "Jake");
    String response = example.post("http://www.roundsapp.com/post", json);
    System.out.println(response);
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粥帚,一起剝皮案震驚了整個(gè)濱河市赠群,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桥滨,老刑警劉巖忽舟,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刁品,死亡現(xiàn)場(chǎng)離奇詭異挑随,居然都是意外死亡眯分,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狈茉,“玉大人,你說(shuō)我怎么就攤上這事刁卜≈镜纾” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蛔趴,是天一觀的道長(zhǎng)挑辆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)孝情,這世上最難降的妖魔是什么鱼蝉? 我笑而不...
    開(kāi)封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮箫荡,結(jié)果婚禮上魁亦,老公的妹妹穿的比我還像新娘。我一直安慰自己菲茬,他們只是感情好吉挣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布派撕。 她就那樣靜靜地躺著,像睡著了一般睬魂。 火紅的嫁衣襯著肌膚如雪终吼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天氯哮,我揣著相機(jī)與錄音际跪,去河邊找鬼。 笑死喉钢,一個(gè)胖子當(dāng)著我的面吹牛姆打,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肠虽,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼幔戏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了税课?” 一聲冷哼從身側(cè)響起闲延,我...
    開(kāi)封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎韩玩,沒(méi)想到半個(gè)月后垒玲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡找颓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年合愈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片击狮。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佛析,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帘不,到底是詐尸還是另有隱情说莫,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布寞焙,位于F島的核電站,受9級(jí)特大地震影響互婿,放射性物質(zhì)發(fā)生泄漏捣郊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一慈参、第九天 我趴在偏房一處隱蔽的房頂上張望呛牲。 院中可真熱鬧,春花似錦驮配、人聲如沸娘扩。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)琐旁。三九已至涮阔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灰殴,已是汗流浹背敬特。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牺陶,地道東北人伟阔。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掰伸,于是被迫代替她去往敵國(guó)和親皱炉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理狮鸭,服務(wù)發(fā)現(xiàn)娃承,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評(píng)論 25 707
  • 這篇文章說(shuō)下OkHttp的基本用法怕篷,是最新的3哦历筝,如果你在網(wǎng)上搜索OkHttp怎么使用發(fā)現(xiàn)有些類沒(méi)有了可能是因?yàn)槿?..
    光劍書架上的書閱讀 2,676評(píng)論 0 5
  • 20匡青 母親代表了世界上最偉大的一種愛(ài),人們給予母親這個(gè)稱謂以世界上最好的評(píng)價(jià)廊谓!那么梳猪,一個(gè)合格的母親,她有什么標(biāo)...
    匡青閱讀 793評(píng)論 2 2
  • 追逐跨界歌王的腳步太久匿沛,也一路見(jiàn)證著濤姐的成長(zhǎng)。她榛鼎,不是唱功最好的逃呼,但卻是態(tài)度最認(rèn)真,跨界最成功的者娱。多變的曲風(fēng)抡笼,潛...
    糾纏的離騷閱讀 478評(píng)論 11 5