NSURLProtocol 如何拦截AFN3.0

如果监控网络是通过注册NSURLProtocol来进行网络监控的,而且是用的AFN3.0,那么坑来了。。。
通过 sessionWithConfiguration:delegate:delegateQueue:
得到的session,他的configuration中已经有一个NSURLProtocol,
所以他不会走我们的protocol来(通过share得到的session没这个问题),怎么解决这个问题呢?
其实很简单,我们将NSURLSessionConfiguration的属性protocolClasses的get方法hook掉,
通过返回我们自己的protocol,这样,
我们就能够监控到通过 sessionWithConfiguration:delegate:delegateQueue:
得到的session的网络请求

更新2018.10.12
无意之间看到有另一种办法如下(还没验证,先记录下)

如果使用了AFNetworking,也需要在AFHTTPSessionManager中注册

NSMutableArray *protocols = [NSMutableArray arrayWithArray:manager.session.configuration.protocolClasses];
[protocols insertObject:[YourURLProtocol class] atIndex:0];
manager.session.configuration.protocolClasses = [protocols copy];

//manager是你发送请求时的AFHTTPSessionManager类,注意这里的manager不能用[AFHTTPSessionManager manager]代替,[AFHTTPSessionManager manager]其实不是单例,每次调用的时候都会init出一个新的manager,因此只能在每次初始化好manager之后都注册一次NSURLProtocol

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容