¿Cómo puedo permitir la connection de https usando AFNetworking?

Tengo AFNetworking configurado pero no acepta https urls. ¿Cómo puedo hacer que AFNEtworking se conecte a través de ssl?

Tengo el siguiente código:

NSMutableURLRequest *apiRequest = [self multipartFormRequestWithMethod:@"POST" path: pathstr parameters: params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { //TODO: attach file if needed }]; AFJSONRequestOperation* operation = [[AFJSONRequestOperation alloc] initWithRequest: apiRequest]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { //success! completionBlock(responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //failure :( NSLog(@"%@", error); completionBlock([NSDictionary dictionaryWithObject:[error localizedDescription] forKey:@"error"]); }]; [operation start]; 

 operation.securityPolicy.allowInvalidCertificates = YES; 

Este código es muy importante. Si no agrega esto, obtendrá un error.

Obviamente, esto solo funcionará si tiene un certificate no autofirmado O si agrega:

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ a su file pch. Si está utilizando los pods de cocoa para esto, es probable que necesite subclass AFHTTPRequestOperation e implementar:

 - (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { if ([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust]) { if ([self bypassSslCertValidation:protectionSpace]) return YES; else return [super connection:connection canAuthenticateAgainstProtectionSpace:protectionSpace]; } return [super connection:connection canAuthenticateAgainstProtectionSpace:protectionSpace]; } - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { if ([self bypassSslCertValidation:challenge.protectionSpace]) { [challenge.sender useCnetworkingential:[NSURLCnetworkingential cnetworkingentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; return; } else return [super connection:connection didReceiveAuthenticationChallenge:challenge]; return; } } - (BOOL) bypassSslCertValidation:(NSURLProtectionSpace *) protectionSpace { if (ENVIRONMENT_TYPE == DEV_ENV || ENVIRONMENT_TYPE == STAGING_ENV) { return YES; } return NO; } 

Luego, dile a AFNEtworking que use la nueva subclass:

 AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@""]]; [client registerHTTPOperationClass:[YourSubClassHTTPRequestOperation class]]; 

No es lo más fácil de hacer en el mundo y ignorar técnicamente la autofirmación no está haciendo que funcione, pero si usa certificates SLL estándar, es probable que funcione bien, recuerde eliminar este código o hacer que solo esté disponible cuando se depura si planeas lanzar.

¡Añadiendo para responder porque los comentarios tienen límites de char!

Pocas opciones mirando los encabezados.

Operación de retorno que se puede agregar manualmente a la queue:

 - (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest 

O pase su operación personalizada de subclass a esta:

 - (void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operation; 

Prueba este codigo

  NSMutableURLRequest *apiRequest = [self multipartFormRequestWithMethod:@"POST" path: pathstr parameters: params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { //TODO: attach file if needed }]; AFJSONRequestOperation* operation = [[AFJSONRequestOperation alloc] initWithRequest: apiRequest]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { //success! completionBlock(responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //failure :( NSLog(@"%@", error); completionBlock([NSDictionary dictionaryWithObject:[error localizedDescription] forKey:@"error"]); }]; operation.securityPolicy.allowInvalidCertificates = YES; [operation start]; 

Si AFNetworking está deshabilitada subclass sobre implementación de superclass, simplemente coloque código como: http // foo // bar y configúrelo en bool