美文网首页
NSURLProtocol 如何拦截AFN3.0

NSURLProtocol 如何拦截AFN3.0

作者: MxlZlh | 来源:发表于2018-09-17 15:16 被阅读58次

如果监控网络是通过注册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

相关文章

网友评论

      本文标题:NSURLProtocol 如何拦截AFN3.0

      本文链接:https://www.haomeiwen.com/subject/dzglnftx.html