Реализуйте URLProtocol, но соблюдайте конфигурацию сеанса

Я хочу перехватить все сетевые вызовы (запрос и ответ) в приложении, поэтому я реализую конкретный URLProtocol подкласс.

Большинство онлайн-примеров просто создают новые URLSession с конфигурацией по умолчанию для каждой задачи. Это означает, что любая конфигурация из исходного сеанса теряется.

Одним из подходов является сохранение задачи из init(task: URLSessionTask, cachedResponse: CachedURLResponse?, client: URLProtocolClient?) и возобновить это в startLoading(), но тогда нет возможности получать уведомления о результатах задачи.

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

Вопрос: как мне реализовать URLProtocol, точнее startLoading(), чтобы конфигурация сеанса не была потеряна, и я все еще получаю обратные вызовы делегата задачи?

Идеи:

  1. Извлеките сеанс (и конфигурацию) из задачи. Минусы: разоблачение частной собственности не гарантируется.
  2. Отказаться от URLProtocol и кружить кучу URLSession а также URLSessionTask методы. Минусы: требует много прыщей.
  3. ?

0 ответов

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