Запрос захвата и ответ NSURLProtocol - PullRequest
0 голосов
/ 09 января 2019

Я хочу реализовать инструмент, который может фиксировать все запросы и ответы моего приложения. Я выбираю NSURLProtocol.

Чтобы не мешать реализации существующей сетевой библиотеки, я перехватываю метод класса defaultSessionConfiguration из NSURLSessionConfiguration методом swizzling. как это:

+ (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
)

Когда я запускаю задание методом метания:

Журнал:

(
  MyURLProtocol
)

После метода swizzle классы протоколов по умолчанию заменяются, поэтому я не знаю, повлияет ли эта ситуация на существующую задачу или нет.

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

...