OkHttp——概述

通過(guò)該篇文章大家可以了解到如下幾點(diǎn)

  1. 什么是OkHttp
  2. 為什么要用OkHttp
  3. OkHttp使用的基本要求
  4. 如何使用OkHttp
  5. OkHttp內(nèi)部是如何構(gòu)造請(qǐng)求和響應(yīng)的
  6. 專題的后續(xù)內(nèi)容

什么是OkHttp

HTTP協(xié)議拍摇,即超文本傳輸協(xié)議(Hypertext transfer protocol)杀糯。是一種詳細(xì)規(guī)定了瀏覽器和萬(wàn)維網(wǎng)(WWW = World Wide Web)服務(wù)器之間互相通信的規(guī)則嫂丙,通過(guò)因特網(wǎng)傳送萬(wàn)維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議鸭廷。
而OkHttp本質(zhì)是一個(gè)Http客戶端租副,我們可以通過(guò)OkHttp發(fā)送向服務(wù)方發(fā)送Http請(qǐng)求麸粮,然后獲取相應(yīng)的響應(yīng)內(nèi)容甘桑。

為什么要用OkHttp

在Java平臺(tái)上缩抡,我們一般會(huì)使用Apache HttpClient 作為 Http 客戶端去發(fā)送 Http 請(qǐng)求,然后再對(duì)響應(yīng)進(jìn)行處理哗讥,那為什么要使用OkHttp呢嚷那?

  • 首先HttpClient API眾多,代碼復(fù)雜杆煞,而且需要用戶關(guān)心資源的回收
  • 而OkHttp內(nèi)部結(jié)構(gòu)清晰魏宽,它的請(qǐng)求/響應(yīng)API 使用建造者模式來(lái)設(shè)計(jì)腐泻,API設(shè)計(jì)簡(jiǎn)單高效。
  • 更重要的是它是一個(gè)高效的HTTP客戶端队询,允許所有同一個(gè)主機(jī)地址的請(qǐng)求共享同一個(gè)socket連接派桩,連接池減少請(qǐng)求延時(shí)
  • 同時(shí)支持透明的GZIP壓縮減少響應(yīng)數(shù)據(jù)的大小
  • 支持緩存響應(yīng)內(nèi)容,避免一些完全重復(fù)的請(qǐng)求

OkHttp使用的基本要求

OkHttp 適用于 Java 8+. 它有一個(gè)更加高效的I/O依賴包Okio蚌斩。【詳細(xì)版本要求傳送門】

如何使用OkHttp

下面給出兩個(gè)例子铆惑,一個(gè)是通過(guò)Get請(qǐng)求從一個(gè)URL中獲取內(nèi)容,并打印為字符串凳寺。完整代碼??

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();
  }
}

另一個(gè)是將數(shù)據(jù)推送到服務(wù)器端鸭津,完整代碼??

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內(nèi)部是如何構(gòu)造請(qǐng)求和響應(yīng)的

當(dāng)我們發(fā)送一個(gè)Http請(qǐng)求的時(shí)候,首先肯定是思考如何構(gòu)造一個(gè)請(qǐng)求肠缨,而在OkHttp內(nèi)部逆趋,我們只需要通過(guò)一個(gè)類Request就可以構(gòu)造出我們需要的任何類型的請(qǐng)求,同樣我們只需要通過(guò)一個(gè)類Response就可以讀取到任何類型的響應(yīng)。

下面是OkHttp的對(duì)請(qǐng)求封裝的實(shí)現(xiàn)類Request

下面這張圖第一眼看起來(lái)復(fù)雜晒奕, 其實(shí)大家只需要看最下面的Request類闻书,它非常簡(jiǎn)單,只包含我們上面提到的url脑慧、method魄眉、headers、body和tag闷袒、cacheControl坑律,剩下的只是該類的實(shí)例域名的實(shí)現(xiàn)類。

Request及其內(nèi)部的實(shí)例域

其中 RequestBody是一個(gè)抽象類囊骤,下圖是該類的Diagram圖晃择。
RequestBody


我們可以通過(guò)如下的建造者模式的方式構(gòu)建我們需要的請(qǐng)求。

        Request request = new Request.Builder()
                .url("http://publicobject.com/helloworld.txt")
                .method("GET",formBody)
                .build();

下面是OkHttp的對(duì)請(qǐng)求封裝的實(shí)現(xiàn)類Response

到目前未知也物,我們已經(jīng)了解了OkHttprequest的內(nèi)容宫屠,下面給出response的Diagram圖,圖中沒(méi)有給出cacheControl滑蚯。

response的Diagram圖

從上圖我們可以清楚地看到OkHttp的response是由哪些內(nèi)容組成的浪蹂,我們可以通過(guò)讀取相應(yīng)的實(shí)例域去獲取我們感興趣的響應(yīng)內(nèi)容。

專題的后續(xù)內(nèi)容

本專題的OkHttp大致分為如下幾個(gè)模塊.

  1. OkHttp——Calls
  2. Connections
  3. Interceptors
  4. HTTPS
  5. Event
  6. Cache
    后續(xù)連載的文章會(huì)依次介紹各個(gè)模塊 告材。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坤次,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子创葡,更是在濱河造成了極大的恐慌浙踢,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灿渴,死亡現(xiàn)場(chǎng)離奇詭異洛波,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)骚露,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門蹬挤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人棘幸,你說(shuō)我怎么就攤上這事焰扳。” “怎么了误续?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵吨悍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蹋嵌,道長(zhǎng)育瓜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任栽烂,我火速辦了婚禮躏仇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腺办。我一直安慰自己焰手,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布怀喉。 她就那樣靜靜地躺著书妻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躬拢。 梳的紋絲不亂的頭發(fā)上躲履,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音估灿,去河邊找鬼崇呵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛馅袁,可吹牛的內(nèi)容都是我干的域慷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汗销,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼犹褒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起弛针,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叠骑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后削茁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宙枷,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掉房,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慰丛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卓囚。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诅病,靈堂內(nèi)的尸體忽然破棺而出哪亿,到底是詐尸還是另有隱情,我是刑警寧澤贤笆,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布蝇棉,位于F島的核電站,受9級(jí)特大地震影響芥永,放射性物質(zhì)發(fā)生泄漏篡殷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一恤左、第九天 我趴在偏房一處隱蔽的房頂上張望贴唇。 院中可真熱鬧,春花似錦飞袋、人聲如沸戳气。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓶您。三九已至,卻和暖如春纲仍,著一層夾襖步出監(jiān)牢的瞬間呀袱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工郑叠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夜赵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓乡革,卻偏偏與公主長(zhǎng)得像寇僧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沸版,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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