iOS 網(wǎng)絡(luò)安全 - 利用 NSURLProtocol 處理重定向

? ? 需求的輪子一直在滾動。你上車了沒?曾有沒發(fā)現(xiàn) Charles 抓取其它 APP 時候,有些數(shù)據(jù)是無法獲取到的?會想到它們是怎么做到的嗎?

大藍的天

? ? NSURLProtocol?也是蘋果眾多黑魔法中的一種,使用它可以輕松地重定義整個URL Loading System。

? ? NSURLProtocol?是蘋果為我們提供的?URL Loading System?一部分,先了解下它在整體中的位置。

URL Loading System?

? ? 從圖中我們可以知道,NSURLProtocol 可攔截的網(wǎng)絡(luò)請求包括NSURLSession,NSURLConnection 的以及 UIWebView 中。而基于 CFNetwork 的網(wǎng)絡(luò)請求,以及在WKWebView 中,只能攔截到最初始的請求,內(nèi)嵌的資源下載攔截不到。不過本文 Tips 中提供了有效的方法。

? ??Mattt?撰寫的?NSURLProtocol?文章中,有張圖更清晰的描述了?URL Loading System,下面的?URL 加載系統(tǒng)的圖片?版本有點久遠,還沒有把 NSURLSession 放進來。

圖片來源:https://nshipster.cn/nsurlprotocol/

? ? 那具體些,NSURLProtocol 能處理些什么問題呢?當你注冊自定義 NSURLProtocol 后,就有機會對所有的請求進行統(tǒng)一的處理,基于這一點它可以讓你:

1.自定義網(wǎng)絡(luò)請求和響應(yīng)結(jié)果

?2.提供自定義的全局緩存支持|實現(xiàn)網(wǎng)絡(luò)緩存。

?3.重定向網(wǎng)絡(luò)請求,實現(xiàn)代理等功能。

?4.對 HTTP 返回內(nèi)容進行Mocking?和Stub?(方便前期測試) 。

?5.全局設(shè)置網(wǎng)絡(luò)請求。


如何使用

? ? 要使用 NSURLProtocol 時你是不能直接實例化 NSURLProtocol 的因為這是一個抽象類只提供基本的功能和屬性,你只能子類化 NSURLProtocol 。

創(chuàng)建分類繼承。

當NSURLConnection準備發(fā)起請求時,它會遍歷所有已注冊的NSURLProtocol,詢問它們能否處理當前請求。所以你需要盡早注冊這個Protocol。

Tip:

? ? 1、目前 WKWebView 無法被 NSURLProtocol 直接攔截,還得用本身的代理。若要支持,那可以參考?Wasteland 的深度好文 -?讓 WKWebView 支持 NSURLProtocol


參考鏈接:

官方文檔:https://developer.apple.com/documentation/foundation/nsurlprotocol

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容