NSURLProtocol使用疑惑

用NSURLProtocol拦截post请求httpbody真的为空吗?还是需要亲手调试一番。

引子

偶然看到一篇文章 NSURLProtocol 拦截 NSURLSession 请求时body丢失问题解决方案探讨

疑惑:用NSURLProtocol拦截post请求httpbody真的为空吗?还是需要亲手调试一番。

protocol基础

参考:URL加载系统

开始调试

1、创建CustomUrlProtocol 继承自 URLProtocol,重写父类方法

override public class func canInit(with request: URLRequest) -> Bool {
    if URLProtocol.property(forKey: "customkey", in: request) != nil {
    //自定义key
        return false
    }
    if let url = request.url?.absoluteString, url.contains("customurl") {
    //自定义url
        return true
    }

    return false
}

2、别忘了 registerClass(CustomUrlProtocol.self)

3、一切看起来顺利,断点这个方法后开始运行

4、结果: 断点没有起作用。没有走canInit这个方法。

5、分析: 网络加载正常,说明请求成功了,即没有正确拦截网络请求。工程用的网络库是AFN 和 Alamofire,这两个库也是基于NSURLSession做请求。

6、改正:查查资料

对于基于NSURLSession的网络请求,需要通过配置NSURLSessionConfiguration对象的protocolClasses属性。

结论

request.HttpBody确实为空

显示 Gitment 评论
0%