objective ios7 http-authentication afnetworking-2

ios7 - objective - AFNetworking 2.0 y autenticación básica HTTP



afnetworking swift 4 (3)

Como @gimenete menciona, las solicitudes de múltiples partes fallarán cuando se use el enfoque de credenciales de @titaniumdecoy, ya que esto se aplica en el bloque de desafío y la versión actual de AFNetworking tiene un problema con esto. En lugar de utilizar el enfoque de credenciales, puede incrustar la autenticación en el encabezado NSMutableRequest

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"PUT" URLString:path parameters:myParams constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData:imageData name:imageName fileName:imageName mimeType:@"image/jpeg"]; } error:&error]; NSString *authStr = [NSString stringWithFormat:@"%@:%@", [self username], [self password]]; NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodedString]]; [request setValue:authValue forHTTPHeaderField:@"Authorization"];

Donde necesitará utilizar una biblioteca de codificación BASE64 de terceros, como NSData + Base64.h y .m Archivos de Matt Gallaghers antes de la solución ARC BASE64

No puedo encontrar AFHTTPClient en AFNetworking 2.0, para usar:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com]]; [client setAuthorizationHeaderWithUsername:@"username" password:@"password"];

¿Cómo se debe gestionar en AFNetworking 2.0?


Este es un ejemplo de cómo realizar una autenticación HTTP básica con AFNetworking 2.0 usando NSURLCredential. La ventaja de este enfoque sobre el uso del método AFHTTPRequestSerializer setAuthorizationHeaderFieldWithUsername:password: es que puede almacenar automáticamente el nombre de usuario y la contraseña en el llavero cambiando la persistence: parámetro de NSURLCredential. (Ver esta respuesta ).

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSURLCredential *credential = [NSURLCredential credentialWithUser:@"user" password:@"passwd" persistence:NSURLCredentialPersistenceNone]; NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:@"https://httpbin.org/basic-auth/user/passwd" parameters:nil]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCredential:credential]; [operation setResponseSerializer:[AFJSONResponseSerializer alloc]]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Success: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Failure: %@", error); }]; [manager.operationQueue addOperation:operation];


La nueva arquitectura de AFNetworking 2.0 usa serializadores para crear solicitudes y analizar respuestas. Para establecer el encabezado de autorización, primero debe inicializar un administrador de operaciones de solicitud que reemplace al cliente AFHTTP, crear un serializador y luego llamar al método dedicado para establecer el encabezado.

Por ejemplo tu código se convertiría en:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com"]]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; [manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"userName" password:@"password"];

Debe leer la documentation y la guía de migración para comprender los nuevos conceptos que vienen con la versión 2.0 de AFNetworking.