2015-12-16 1 views
0

AFNetworking Je veux utiliser mon en-tête http If-None-Match mais je ne trouve pas comment avec AFNetworking 3.0Utilisez-têtes HTTP personnalisés avec 3.0

Le Migration Guide n'explique rien à ce sujet et dire fondamentalement juste d'utiliser a normal GET request qui doesn Ça ne semble pas aider pour moi.

Voici ce que je faisais avec AFNetworking 2:

let getAvatarRequest = NSURLRequest(URL: avatarUrl!, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 60).mutableCopy()  
getAvatarRequest.setValue(avatarImageETag!, forHTTPHeaderField: "If-None-Match") 

Merci pour votre aide.

Répondre

1

Ok j'ai trouvé la réponse, rien en fait changé, mais il est pas évident, voici le code:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
let manager = AFURLSessionManager(sessionConfiguration: configuration) 

let request = NSMutableURLRequest(URL: remoteFileURL!) 
request.setValue("", forHTTPHeaderField: "If-None-Match") 
let downloadTask = manager.downloadTaskWithRequest(request, progress: nil, destination: { (targetURL: NSURL, response: NSURLResponse) -> NSURL in 
    // Success 
}, completionHandler: { (response: NSURLResponse, filePath: NSURL?, error: NSError?) -> Void in 
    // Error 
}) 
downloadTask.resume() 
-4

C'est de la README:

Ajout d'un en-tête HTTP personnalisé à une demande est prise en charge directement dans la méthode globale de la demande. Cela facilite l'attachement des en-têtes HTTP à une demande qui peut changer constamment.

Pour les en-têtes HTTP qui ne changent pas, il est recommandé de les mettre sur le NSURLSessionConfiguration ils sont appliqués automatiquement à tout NSURLSessionTask créé par le NSURLSession sous-jacent.

let headers = [ 
    "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==", 
    "Content-Type": "application/x-www-form-urlencoded" 
] 

Alamofire.request(.GET, "https://httpbin.org/get", headers: headers) 
    .responseJSON { response in 
     debugPrint(response) 
    } 
+1

Ouais bien ... il est Alamofire, pas AFNetworking, même si j'apprécie la réponse, totalement hors-sujet – AncAinu

0

Avertissement hors-sujet réponse Mais dans certains cas, vous pouvez décider il est impossible d'utiliser AFNetworking. Ma tâche consiste simplement à télécharger un fichier à partir d'une API personnalisée. Pour l'accès, je vais utiliser le jeton sur "x-token" clé dans les en-têtes. AFNetworking ne fonctionnait pas seulement en téléchargement, dans les requêtes GET/POST tout était génial!

// we use "x-token" to acces 
self.tokenSessionManager = [AFHTTPSessionManager manager]; 
((AFJSONResponseSerializer *)_tokenSessionManager.responseSerializer).removesKeysWithNullValues = YES; 
[_tokenSessionManager.requestSerializer setValue:self.user.token forHTTPHeaderField:@"x-token"]; 
// it works perfect in other GET/POST requests but not in downloading 


NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:item.urlString]]; 
// try to set it directly in request 
NSString *key = @"x-token"; 
[request setValue:[self.tokenSessionManager.requestSerializer valueForHTTPHeaderField:key] forHTTPHeaderField:key]; 
[[self.tokenSessionManager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { 
    return [NSURL URLWithString:filePath]; 
} completionHandler:^(NSURLResponse *response, NSURL *urlPath, NSError *error) { 
    NSLog(@"Failure"); 
}] resume]; 

Et vous pouvez essayer d'utiliser NSURLSession et NSURLRequest

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
NSString *key = @"x-token"; 
sessionConfiguration.HTTPAdditionalHeaders = @{key:[self.tokenSessionManager.requestSerializer valueForHTTPHeaderField:key]}; 
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; 

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:item.urlString]]; 
[[session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
    NSLog(@"Success"); 
}] resume];