OkHttp3原始碼(二) Request

2021-08-17 15:36:55 字數 2823 閱讀 8967

request ——是對http請求報文概念的具體實現

請求報文的結構圖

根據結構圖去閱讀原始碼能很好的理解某些屬性的真實意義。

我們看一下原始碼。

public

final

class

request

//返回設定的url

//返回設定的方法 get或post

public string method()

//返回所有的頭部物件(這裡的物件可以理解為乙個鍵值對)

public headers headers()

//返回頭部名稱為name的資訊

public string header(string name)

//返回頭部所有名稱為name的資訊

public listheaders(string name)

//返回請求體

public requestbody body()

//返回設定的請求標籤

public object tag()

//根據自身設定的引數重新構造物件

public builder newbuilder()

//根據在頭部設定的與快取有關的資訊,返回快取控制器,

public cachecontrol cachecontrol()

//是否用的https協議

/*** 接下來就是builder設計模式

* okhttp用的比較多的設計模式

* 對builder模式不了解的,先去了解下。這裡概括一下builder模式:類的某些字段無法通過自身去賦值,需要委託給其他類去賦值。

*/public

static

class

builder

//根據resquest已設定的引數重新建立物件

builder(request request)

//設定httpurl,這裡就省去了對string url 內容的封裝。

//設定url, 這裡需要對string url的內容封裝成httpurl。

}//設定url,其實內部的實現與string url相同。

public builder url(url url)

//設定乙個頭部資訊(鍵值對的形式),並將與此name相同的頭部資訊全部清除。

public builder header(string name, string value)

//新增乙個頭部資訊(鍵值對的形式),這裡這是不用清除其他頭部資訊

public builder addheader(string name, string value)

//清除所有頭部名稱為name的資訊

public builder removeheader(string name)

//設定頭部物件

public builder headers(headers headers)

//設定將快取控制器裡面設定的資訊新增到頭部

public builder cachecontrol(cachecontrol cachecontrol)

//設定get方法並且請求體為null

public builder get()

//設定post方法並且請求體不能為null

public builder post(requestbody body)

//設定方法,如果方法有請求體,必須設定請求體

}//設定當前請求體的標籤

public builder tag(object tag)

//建立request物件。

public request build() }}

通過上面的注釋分析我們知道:

request類主要配置網路請求的請求體,

相關引數有httpurl、method、headers、requestbody、cachecontrol。

對於除method以外的其他引數類,都是對網路請求的請求體相關資訊的封裝。

我們後面會解釋headers、requestbody、cachecontrol三個類。

OkHttp3原始碼解析(二)OkHttp基本流程

首先使用okhttp發起乙個非同步請求,以此先簡單分析okhttp的大致流程。okhttp使用 okhttp流程主要類 功能 使用建造者模式初始化連線池,dispatcher等,為了節約資源推薦使用單列模式建立okhttpclient物件,維護執行緒池比較耗資源。http請求所需的url,請求方法等...

OkHttp3原始碼解析

compile com.squareup.okhttp3 okhttp 3.6.0 最新版本 okhttp的最底層是使用socket,而不是urlconnection,它通過platform的class.forname 反射獲得當前runtime使用的socket庫。okhttp3使用場景特點 資料...

OkHttp3原始碼(三) Header

由於header類是之前已經分析好的,所以這裡直接拿過來就可以了。之所以之前沒有發布這篇部落格是因為在學習header類之前,首先要明白http首部資訊的相關欄位及內容,關於這個如果還不太了解請參看http首部的字段及相應的取值內容 header類屬性 通過字串資料的方式維護資料,用於實現獲取資料的...