NSURLProtocol入門到精通婚脱,我是如何只攔截SDWebImage圖片鏈接(附Demo下載地址)

An NSURLProtocol
object handles the loading of protocol-specific URL data. The NSURLProtocol
class itself is an abstract class that provides the infrastructure for processing URLs with a specific URL scheme. You create subclasses for any custom protocols or URL schemes that your app supports.

大概意思是NSURLProtocol是用來處理URL數(shù)據(jù)加載的類隔心。它本身是一個抽象類椅贱,并為處理網(wǎng)絡(luò)請求提供基礎(chǔ)一個殼怀跛,你可以子類化它萍丐,重新定義新的或已存在的URL的行為拣宰。

可能還是不明白有什么鬼用党涕,接下來我們來看一張圖,你就能很容易明白他在整個系統(tǒng)中地位了巡社。這張圖可能有點老了膛堤,沒有把NSURLSession 放進來.

NSURLProtocol結(jié)構(gòu)圖.jpg

雖然URL加載系統(tǒng)包含很多東西,一層又一層的裝飾設(shè)計晌该,造就龐大的URL Loading System肥荔。NSURLProtocol或許是URL加載系統(tǒng)中最功能強大但同時也是最晦澀的部分了。用了它朝群,你不必改動應(yīng)用在網(wǎng)絡(luò)調(diào)用上的其他部分燕耿,就可以改變URL加載行為的全部細節(jié)。 對現(xiàn)有的AFNetworking 姜胖、SDWebImage 等你都可以重新修改其中網(wǎng)絡(luò)請求和響應(yīng)缸棵。

  • 比如攔截圖片加載請求,轉(zhuǎn)而從本地文件加載谭期。之前半糖的文章HTML發(fā)布文章預覽功能就是通過他實現(xiàn)的
  • 對請求進行HTTPDNS解析堵第,動態(tài)設(shè)置Host,解決不同網(wǎng)絡(luò)下客戶端不能訪問的情況
  • 對請求和返回的數(shù)據(jù)進行敏感信息過濾
  • 對請求進行驗證簽名
  • 自定義網(wǎng)絡(luò)請求和返回結(jié)果
  • 實現(xiàn)網(wǎng)絡(luò)緩存

1隧出、 創(chuàng)建NSURLProtocol的子類踏志,重寫以下方法

  • + canInitWithRequest: 抽象方法,子類給出是否能相應(yīng)該請求胀瞪。如果響應(yīng)YES针余,說明自己的CustomURLProtocol實現(xiàn)該請求饲鄙。

  • + canonicalRequestForRequest:抽象方法,重寫該方法圆雁,可以對請求進行修改忍级,例如添加新的頭部信息,修改伪朽,修改url等轴咱,返回修改后的請求。

  • + requestIsCacheEquivalent:toRequest:Returns whether two requests are equivalent for cache purposes.

  • - startLoading開始下載烈涮,需要在該方法中發(fā)起一個請求朴肺,對于NSURLConnection來說,就是創(chuàng)建一個NSURLConnection坚洽,對于NSURLSession戈稿,就是發(fā)起一個NSURLSessionTask 。一般下載前需要設(shè)置該請求正在進行下載讶舰,防止多次下載的情況發(fā)生

<pre class=”brush: java; gutter: true;”>
[NSURLProtocol setProperty:@(YES) forKey:protocolKey inRequest:request];
</pre>

  • - stopLoading 停止相應(yīng)請求鞍盗,清空請求Connection 或 Task

2、定義自己的網(wǎng)絡(luò)請求

實現(xiàn)startLoading中代理協(xié)議方法跳昼。 對NSURLConnection來說橡疼,要實現(xiàn)NSURLConnectionDataDelegate代理方法,對于NSURLSession來說庐舟,需要實現(xiàn)NSURLSessionTaskDelegate代理方法欣除。在這些協(xié)議方法中需要通過NSURLProtocolClient 通知URL Loading System

/*-URLProtocol:cachedResponseIsValid:
-URLProtocol:didCancelAuthenticationChallenge:
-URLProtocol:didFailWithError:
-URLProtocol:didLoadData:
-URLProtocol:didReceiveAuthenticationChallenge:
-URLProtocol:didReceiveResponse:cacheStoragePolicy:
-URLProtocol:wasRedirectedToRequest:redirectResponse:
-URLProtocolDidFinishLoading:
*/

3、合適的位置注冊自定義的NSURLProtocol子類

調(diào)用[NSURLProtocol registerClass:[CustomURLProtocol class]]
進行注冊挪略,調(diào)用[NSURLProtocol unregisterClass:[CustomURLProtocol class]]注銷

結(jié)束

  • 自定義HttpDNSImageURLProtocol 實現(xiàn)了對SDWebImage 框架中圖片加載連接的攔截历帚,通過攔截請求域名動態(tài)解析出對應(yīng)的訪問IP,重設(shè)請求Host杠娱,優(yōu)化圖片加載挽牢。
    -源碼下載地址

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市摊求,隨后出現(xiàn)的幾起案子禽拔,更是在濱河造成了極大的恐慌,老刑警劉巖室叉,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睹栖,死亡現(xiàn)場離奇詭異,居然都是意外死亡茧痕,警方通過查閱死者的電腦和手機野来,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踪旷,“玉大人曼氛,你說我怎么就攤上這事豁辉。” “怎么了舀患?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵徽级,是天一觀的道長。 經(jīng)常有香客問我聊浅,道長餐抢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任狗超,我火速辦了婚禮,結(jié)果婚禮上朴下,老公的妹妹穿的比我還像新娘努咐。我一直安慰自己,他們只是感情好殴胧,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布渗稍。 她就那樣靜靜地躺著,像睡著了一般团滥。 火紅的嫁衣襯著肌膚如雪竿屹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天灸姊,我揣著相機與錄音拱燃,去河邊找鬼。 笑死力惯,一個胖子當著我的面吹牛碗誉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播父晶,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼哮缺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甲喝?” 一聲冷哼從身側(cè)響起尝苇,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埠胖,沒想到半個月后糠溜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡直撤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年诵冒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谊惭。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡汽馋,死狀恐怖侮东,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豹芯,我是刑警寧澤悄雅,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站铁蹈,受9級特大地震影響宽闲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜握牧,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一容诬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沿腰,春花似錦览徒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至措嵌,卻和暖如春躲叼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背企巢。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工枫慷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪规。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓流礁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親罗丰。 傳聞我的和親對象是個殘疾皇子神帅,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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