iOS中的 NSURLProtocol 初识

iOS中的 NSURLProtocol 简介

  1. NSURLProtocol是 iOS 里面的URL Loading System的一部分,但是从它的名字来看,你绝对不会想到它会是一个对象,可是它偏偏是个对象。。。而且还是抽象对象(可是OC里面没有抽象这一说)。平常我们做网络相关的东西基本很少碰它,但是它的功能却强大得要死。

  2. URL loading system 原生已经支持了http,https,file,ftp,data这些常见协议,当然也允许我们定义自己的protocol去扩展,或者定义自己的协议。当URL loading system通过NSURLRequest对象进行请求时,将会自动创建NSURLProtocol的实例(可以是自定义的)。这样我们就有机会对该请求进行处理。官方文档里面介绍得比较少.

iOS 开发中使用 NSURLProtocol 拦截 HTTP 请求

iOS NSURLProtocol 作用:

1.自定义请求和响应

2.提供自定义的全局缓存支持

3.重定向网络请求

4.提供HTTP Mocking (方便前期测试)

5.其他一些全局的网络请求修改需求

注意点

需要注意的是 NSURLProtocol 只能拦截 UIURLConnection 、 NSURLSession 和 UIWebView 中的请求,对于 WKWebView 中发出的网络请求也无能为力,如果真的要拦截来自 WKWebView 中的请求,还是需要实现 WKWebView 对应的 WKNavigationDelegate ,并在代理方法中获取请求。 无论是 NSURLProtocol 、 NSURLConnection 还是 NSURLSession 都会走底层的 socket,但是 WKWebView 可能由于基于 WebKit,并不会执行 C socket 相关的函数对 HTTP 请求进行处理,具体会执行什么代码暂时不是很清楚,


API.png

推荐阅读更多精彩内容