Запрос захвата и ответ 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 классы протокола по умолчанию заменяются, поэтому я не знаю, будет ли эта ситуация влиять или не влиять на существующую задачу.

Кстати, я хочу знать роли классов протокола по умолчанию.

0 ответов

Другие вопросы по тегам