web-dev-qa-db-fra.com

Alamofire: suivez les redirections HTTP (ou non)

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?

24
Jonathan Hersh

La gestion flexible des redirections est maintenant dans Alamofire grâce à une autre demande d'extraction et est disponible avec Alamofire 1.2.0.

9
Jonathan Hersh

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

6
onmyway133

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?

0
ProllyGeek