Okhttp內部解析

2021-08-11 21:05:55 字數 1833 閱讀 2218

okhttp是乙個網路請求類庫,與httpurlconnection是同一級別的,okhttp比起httpurlconnection做了大量的效能優化和在使用上的優化。

第一部分:例項建立

okhttp關鍵的類是okhttpclient。它有兩種構造方式,如下:

1)okhttpclient client = new okhttpclient();//使用構造方法直接建立okhttpclient物件。

2)okhttpclient.builder builder = new okhttpclient.builder();//先建立構建者物件

builder.connecttimeout(3*1000, timeunit.milliseconds);//設定超時時間

okhttpclient client = builder.build();//使用構建者建立okhttpclient物件。

如果使用new的方式建立,內部的引數我們也就使用了預設配置。我們無法修改了。

如果我們想要修改內部的引數來適應專案的需求,我們就要使用建造者模式來建立例項,通過builder來對引數進行設定。

第二部分:request請求類的使用

request是請求類,內部分成四個部分:請求路徑,請求方式,請求header,請求體

httpurl url;  //路徑

string method; //get或者post方式

okhttp3.headers.builder headers; //header引數

requestbody body; //post的請求體

request類的內部引數的修改,其實也是使用的建造者模式處理的,

request.builder builder = new request.builder();

builder.url("***xx");

//修改路徑

builder.method("get"

,null);

//因為預設是get方式

builder.addheader("content"

,"chian");

//新增header

request rq = builder.build();

第三部分:post請求

以上都是不涉及到請求體的,也就是說是get方式的請求,當我們需要使用post請求時,就需要使用到requestbody類了。

1. 通過frombody類建立表單體

formbody.builder formbody = new formbody.builder();//建立表單請求體

formbody.add("username","zhangsan");//傳遞鍵值對引數

formbody.add("password","000000");//傳遞鍵值對引數

requestbody body= formbody.build();

2. 通過 multipartbody類我們可以同時 上傳檔案和鍵值對

multipartbody multipartbody =new multipartbody.builder()

.settype(multipartbody.form)

.addformdatapart("groupid",""+groupid)//新增鍵值對引數

.addformdatapart("title","title")

.addformdatapart("file",file.getname(),requestbody.create(mediatype.parse("file/*"), file))//新增檔案

.build();

OkHttp原始碼徹底解析(五)OkHttp連線池

本系列文章 okhttp原始碼徹底解析 一 okhttp請求流程 okhttp原始碼徹底解析 二 okhttp架構及api原始碼 okhttp原始碼徹底解析 三 okhttp3.0 原理 責任鏈模式 okhttp原始碼徹底解析 四 okhttp 的作用 okhttp原始碼徹底解析 五 okhttp連...

OkHttp原始碼解析

okhttp對外的入口,可以理解為okhttp的平台,其定義了網路協議 dns 請求時間等 網路請求的執行者,enqueue為非同步請求需要傳入okhttpcallback,exexute 為同步請求,直接返回response 網路請求資訊的封裝類,內建url head 請求方式method 請求引...

okhttp原始碼解析

okhttp是乙個非常優秀的網路請求框架,已被谷歌加入到android的原始碼中。目前比較流行的retrofit也是預設使用okhttp的。所以okhttp的原始碼是乙個不容錯過的學習資源,學習原始碼之前,務必熟練使用這個框架,否則就是跟自己過不去。至於為什麼有這麼多優點,各位看官老爺在下面的原始碼...