Okhttp攔截器

Okhttp攔截器分為兩大類,一類是應(yīng)用攔截器,另一類是網(wǎng)絡(luò)攔截器。

Application Interceptor

適用于在請求前統(tǒng)一加一些公共參數(shù),例如在添加App的版本號,用戶ID,手機(jī)版本號,運(yùn)營商類型等參數(shù)?;蛘邔憫?yīng)體的數(shù)據(jù)進(jìn)行json轉(zhuǎn)化。

NetworkInterceptor

在這一層攔截器中可以獲取到最終發(fā)送請求的request,也可以獲取到真正發(fā)生網(wǎng)絡(luò)請求后回來的response響應(yīng),從而修改對應(yīng)的請求或者響應(yīng)的數(shù)據(jù)。

兩種攔截器的區(qū)別

Application Interceptor

  • 不需要去關(guān)心發(fā)生的重定向和重試操作。因?yàn)樗幱诘谝粋€(gè)攔截器,會獲取到最終響應(yīng)的response。
  • 只會被調(diào)用一次,即使這個(gè)響應(yīng)是從緩存中獲取的。
  • 只關(guān)注原始的請求,不去關(guān)心請求的資源是否發(fā)生了變化,我只關(guān)注最后的response結(jié)果而已。
  • 因?yàn)槭堑谝粋€(gè)被執(zhí)行的攔截器,因此呢它有權(quán)決定是否要調(diào)用其他攔截,也就是Chain.proceed()方法是否要執(zhí)行。
  • 因?yàn)槭堑谝粋€(gè)被執(zhí)行的攔截器,因此它可以有多次調(diào)用Chain.proceed()方法,其實(shí)也就是相當(dāng)于與重新請求的作用。

Network Interceptor

  • 因?yàn)镹etWorkInterceptor是排在第6個(gè)攔截器中,因此可以操作經(jīng)過RetryAndFollowup進(jìn)行失敗重試或者重定向之后得到response。
  • 對于從緩存獲取的response則不會去觸發(fā)NetworkInterceptor。因?yàn)轫憫?yīng)會從CacheInterceptor返回。
  • 觀察數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸。
  • 可以獲得裝在請求的連接。
    例如自定義token攔截器(示例):
public class TokenInterceptor implements Interceptor {
    public static int NEED_AUTH=401;
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request=chain.request();
        Response originalResponse=chain.proceed(request);
        //401表示需要重新登陸或者token失效,大致的意思是
        //當(dāng)發(fā)起請求發(fā)現(xiàn)服務(wù)器返回token值過期的信息,這個(gè)時(shí)候就重新獲取最新的Token值然后重新發(fā)起請求
        if(originalResponse.code()==NEED_AUTH){
            //TODO 獲取新token,這里只給出思路
            String newToken="newToken";
            //然后保存token值
            Request newRequest=request.newBuilder()
                    .header("token",newToken)//為請求重新添加Token值
                    .build();
            originalResponse.body().close();
           // RequestBody requestBody= new FormBody.Builder().build();
            return chain.proceed(newRequest);
        }
        return originalResponse;
    }
}

總結(jié)

不管是Application Interceptor還是NetWork Interceptor這兩種攔截器都有一個(gè)共同的功能,那就是可以修改對應(yīng)的請求或者是響應(yīng)的數(shù)據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容