參考文章:
URLProtocol 注冊方式的細(xì)節(jié)問題
NSURLProtocol的基本使用
NSURLProtocol registerClass:
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"data.length:%ld",data.length);
}] resume];
[NSURLSession sharedSession]會按照NSURLProtocol registerClass:注冊的類遍歷,后注冊的先遍歷.(只有一個可以接受響應(yīng))
NSURLSessionConfiguration.protocolClasses
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.protocolClasses = @[[WYTURLProtocol class]];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"data.length:%ld",data.length);
}] resume];
[NSURLSessionConfiguration defaultSessionConfiguration]創(chuàng)建的config不受NSURLProtocol registerClass:注冊的影響,需要配置config.protocolClasses
支持后臺下載的session,不支持配置WYTURLProtocol
NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"NSURLProtocol_Test"];
// Custom NSURLProtocol subclasses are not available to background sessions.
// 支持后臺下載的session,不支持配置WYTURLProtocol,設(shè)置protocolClasses不會生效
config.protocolClasses = @[[WYTURLProtocol class]];
HTTPBody丟失問題
據(jù)蘋果官方說明,因?yàn)檎埱髤?shù)可能會很大,為了保證性能,請求參數(shù)是沒有被攔截掉的,就是post的HTTPBody是沒有的