Запрос захвата и ответ NSURLProtocol
Я хочу реализовать инструмент, который может фиксировать все запросы и ответы моего приложения. я выбираю NSURLProtocol
,
Чтобы не мешать реализации существующей сетевой библиотеки, я перехватываю метод класса defaultSessionConfiguration из NSURLSessionConfiguration
мошенническим методом. как это:
+ (void)load{
swizzleSelector([self class], @selector(defaultSessionConfiguration), @selector(pro_defaultSessionConfiguration));
}
+ (NSURLSessionConfiguration *)pro_defaultSessionConfiguration {
NSURLSessionConfiguration *con = [[self class] pro_defaultSessionConfiguration];
con.protocolClasses = @[[MyURLProtocol class]];//[classes copy];
return con;
}
Затем я реализую свой собственный протокол URL-адреса и захват успешным.
Вопрос в том:
Когда я запускаю задание без метода метания:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];
NSURLSessionConfiguration *con = [NSURLSessionConfiguration defaultSessionConfiguration];
NSLog(@"%@", con.protocolClasses);
NSURLSession *session = [NSURLSession sessionWithConfiguration:con delegate:nil delegateQueue:nil];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
[dataTask resume];
Журнал это:
(
"_NSURLHTTPProtocol",
"_NSURLDataProtocol",
"_NSURLFTPProtocol",
"_NSURLFileProtocol",
NSAboutURLProtocol
)
Когда я запускаю задание с помощью метода Swizzling:
Журнал это:
(
MyURLProtocol
)
После метода Swizzle классы протокола по умолчанию заменяются, поэтому я не знаю, будет ли эта ситуация влиять или не влиять на существующую задачу.
Кстати, я хочу знать роли классов протокола по умолчанию.