預(yù)處理器(Preprocessor
)可以讓我們在請(qǐng)求發(fā)出之前對(duì)請(qǐng)求本身做一些改變,但與OkHttp
的攔截器(Interceptor
)不同:預(yù)處理器可以讓我們 異步 處理這些問題。
例如,當(dāng)我們想為請(qǐng)求任務(wù)自動(dòng)添加Token
頭信息,而Token
只能通過異步方法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ù)處理器支持串行處理(詳見6.5章節(jié))
攔截器處理時(shí)機(jī)在請(qǐng)求前和響應(yīng)后,預(yù)處理器只在請(qǐng)求前,并且先于攔截器執(zhí)行。關(guān)于響應(yīng)后,OkHttps還提供了全局回調(diào)監(jiān)聽(詳見6.6章節(jié))
如果覺得 OkHttps 好用,就去點(diǎn)個(gè) Star 吧,項(xiàng)目地址:
更多建議: