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