Подтвердить что ты не робот

Alamofire: переадресация HTTP (или нет)

Я пытаюсь настроить Alamofire на переадресацию (или нет) на основе запроса.

Alamofire имеет закрытый внутренний класс SessionDelegate, который служит для NSURLSessionTaskDelegate для текущего сеанса URL. SessionDelegate реализует соответствующий метод делегата URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:), который именно то, что я хочу.

Еще лучше, реализация делегата рассматривает закрытие пользовательской переменной с именем taskWillPerformHTTPRedirection, чтобы определить, как обращаться с перенаправлением - снова, именно то, что я хочу!

И насколько я могу судить, это закрытие всегда nil по умолчанию - оно не назначается внутри Alamofire, что предполагает, что он предназначен для того, чтобы позволить пользователю назначить ему закрытие.

Проблема: я не могу получить доступ к этому закрытому классу SessionDelegate, чтобы назначить закрытие его переменной taskWillPerformHTTPRedirection. Это частный класс, и он не отображается в моих файлах Swift. Каковы надлежащие способы конфигурирования запроса Alamofire (не) для переадресации?

4b9b3361

Ответ 2

Вы можете использовать его так:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let sessionDelegate = Manager.SessionDelegate()
sessionDelegate.taskWillPerformHTTPRedirectionWithCompletion = {
   (session: NSURLSession, task: NSURLSessionTask, response: NSHTTPURLResponse,
    newRequest: NSURLRequest, completionHandler: NSURLRequest? -> Void) in

    // do something
}

let manager = Manager(configuration: configuration, delegate: sessionDelegate)

Alamofire Manager сохраняет delegate настолько сильным, что вы можете быть уверены

public let delegate: SessionDelegate

но помните willPerformHTTPRedirection

Этот метод вызывается только для задач в дефолтных и эфемерных сессиях. Задачи в фоновых сеансах автоматически следуют за перенаправлениями.

также полезно читать об основных принципах Обработка перенаправления и другие изменения запроса

Ответ 3

Я думаю, что проблема обсуждалась давно, проверьте этот issue

Матовый ответ был ясен, хотя:

Я предполагаю, что в SessionDelegate есть различные свойства, TaskDelegate, DataTaskDelegate и DownloadTaskDelegate предназначены для для использования клиентами для расширения/переопределения отдельных делегатов поведение.


Собственно, это неверно. Они реализованы внутри ради полноты. Любая функциональность, предназначенная для конечного пользователя будет отображаться в Менеджере или Запросить.

В любом случае я вижу, что щедрость предлагается Аароном, а Джонатан разворачивал свою собственную версию, поэтому почему вы используете эту вилку?