J'essaie de configurer Alamofire pour suivre (ou non) les redirections à la demande.
Alamofire a une classe interne privée SessionDelegate
qui sert de NSURLSessionTaskDelegate
pour la session URL en cours. SessionDelegate
implémente la méthode déléguée appropriée, URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:)
, qui correspond exactement à ce que je souhaite.
Mieux encore, l'implémentation du délégué consulte une fermeture de variable personnalisée nommée taskWillPerformHTTPRedirection
pour déterminer comment gérer la redirection - là encore, exactement ce que je veux!
Et pour autant que je sache, cette fermeture est toujours nil
par défaut - Alamofire ne l’attribue pas en interne, ce qui suggère qu’elle est destinée à permettre à l’utilisateur de lui attribuer une fermeture.
Le problème: je ne peux pas accéder à cette classe privée SessionDelegate
pour attribuer une fermeture à sa variable taskWillPerformHTTPRedirection
. C'est une classe privée et ce n'est pas visible pour mes fichiers Swift. Quel est le bon moyen de configurer une demande Alamofire pour (ne pas) suivre les redirections?
La gestion flexible des redirections est maintenant dans Alamofire grâce à une autre demande d'extraction et est disponible avec Alamofire 1.2.0
.
Vous pouvez l'utiliser comme ça
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 conserve la valeur delegate
aussi forte afin que vous puissiez être sûr
public let delegate: SessionDelegate
mais rappelez-vous willPerformHTTPRedirection
Cette méthode est appelée uniquement pour les tâches dans les sessions par défaut et éphémères. Les tâches en arrière-plan suivent automatiquement les redirections.
il est également bon de lire sur les principes fondamentaux Gestion des redirections et autres modifications de demandes
Je pense que cette question a été discutée il y a longtemps, vérifiez cetteissue
la réponse de Matt était claire:
Je suppose que diverses propriétés de type fermeture dans SessionDelegate, TaskDelegate, DataTaskDelegate et DownloadTaskDelegate sont destinées à être utilisées par Par les clients pour étendre/outrepasser le comportement des délégués En particulier.
En fait, c'est faux. Celles-ci sont mises en œuvre en interne dans un souci de complétude. Toute fonctionnalité destinée à l'utilisateur final Serait exposée sur Manager ou Request .
Quoi qu'il en soit, je vois que la prime est offerte par Aaron, alors que Jonathan se sert de sa propre versionversion, alors pourquoi ne pas utiliser cette fourchette?