用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确实为空