W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
預(yù)處理器(Preprocessor
)可以讓我們?cè)谡?qǐng)求發(fā)出之前對(duì)請(qǐng)求本身做一些改變,但與OkHttp
的攔截器(Interceptor
)不同:預(yù)處理器可以讓我們 異步 處理這些問(wèn)題。
例如,當(dāng)我們想為請(qǐng)求任務(wù)自動(dòng)添加Token
頭信息,而Token
只能通過(guò)異步方法requestToken
獲取時(shí),這時(shí)使用Interceptor
就很難處理了,但可以使用預(yù)處理器輕松解決:
HTTP http = HTTP.builder()
.addPreprocessor((PreChain chain) -> {
HttpTask<?> task = chain.getTask();// 獲得當(dāng)前的HTTP任務(wù)
if (!task.isTagged("Auth")) { // 根據(jù)標(biāo)簽判斷該任務(wù)是否需要Token
chain.proceed();
return;
}
requestToken((String token) -> { // 異步獲取 Token
task.addHeader("Token", token);// 為任務(wù)添加頭信息
chain.proceed(); // 繼續(xù)當(dāng)前的任務(wù)
});
})
.build();
和Interceptor
一樣,Preprocessor
也可以添加多個(gè)。他們之間的區(qū)別如下:
- 攔截器只能處理同步操作,預(yù)處理器支持處理異步操作
攔截器都是并行處理請(qǐng)求,預(yù)處理器支持串行處理(詳見(jiàn)6.5章節(jié))
攔截器處理時(shí)機(jī)在請(qǐng)求前和響應(yīng)后,預(yù)處理器只在請(qǐng)求前,并且先于攔截器執(zhí)行。關(guān)于響應(yīng)后,OkHttps還提供了全局回調(diào)監(jiān)聽(tīng)(詳見(jiàn)6.6章節(jié))
如果覺(jué)得 OkHttps 好用,就去點(diǎn)個(gè) Star 吧,項(xiàng)目地址:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: