美文网首页
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