Obtener una image de un enlace https.

Acabo de comenzar a aprender el desarrollo ios, y estoy tratando de get una image del website que utiliza ssl, cuando me conecto al sitio a través de un browser (computadora portátil) hay una advertencia que dice que el certificate raíz no es de confianza, que soy no el propietario del website, sin embargo, puedo confiar plenamente en él. Mi primer bash:

self.eventImage.image = [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:imageUrl]]]; 

así que me sale este error

La carga HTTP de NSURLConnection / CFURLConnection falló (kCFStreamErrorDomainSSL, -9807)

He intentado enviar a los usuarios al enlace de image al iniciar el browser web ios, cuando hacen eso, recibirían un post preguntándoles si podían confiar en él o no, si presionan sí, la image aparecerá, sin embargo, quiero que la image para aparecer dentro de la aplicación.

También he intentado usar la vista web, pero no funcionó.

La mayoría de las preguntas similares aquí sugerían usar esto

 - (BOOL)connection:(NSURLConnection *) connection canAuthenticateAgainstProtectionSpace: (NSURLProtectionSpace *)protectionSpace { return NO; //return [protectionSpace.authenticationMethod isEqualToString: // NSURLAuthenticationMethodServerTrust]; } - (void)connection:(NSURLConnection *) connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge { NSString *imageUri =[self.detailItem objectForKey: @"image"]; NSArray *trustedHosts = [[NSArray alloc]initWithObjects:imageUri, nil]; if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) if ([trustedHosts containsObject:challenge.protectionSpace.host]) [challenge.sender useCnetworkingential:[NSURLCnetworkingential cnetworkingentialForTrust: challenge.protectionSpace.serverTrust] forAuthenticationChallenge: challenge]; [challenge.sender continueWithoutCnetworkingentialForAuthenticationChallenge:challenge]; } 

pero estos dos methods nunca fueron llamados cuando los agregué.

Cambia tu codigo En lugar de utilizar NSData dataWithContentsOfURL: debe usar su propia NSURLConnection explícita. Luego puede usar los methods NSURLConnectionDelegate apropiados.

Otra opción es usar la popular biblioteca AFNetworking .

Intente agregar estos dos methods

 - (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; } -(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { [challenge.sender useCnetworkingential:[NSURLCnetworkingential cnetworkingentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; [challenge.sender continueWithoutCnetworkingentialForAuthenticationChallenge:challenge]; } 

rmaddy, user2179059, y Anindya Sengupta, las respuestas ayudaron a resolver este problema.

Primero, utilicé NSURLConnection explícitamente, y para la connection segura usé este enfoque (lo obtuve de esta publicación de blog )

 -(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace: (NSURLProtectionSpace *)protectionSpace { return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; } -(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *)challenge { if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { // instead of XXX.XXX.XXX, add the host URL, // if this didn't work, print out the error you receive. if ([challenge.protectionSpace.host isEqualToString:@"XXX.XXX.XXX"]) { NSLog(@"Allowing bypass..."); NSURLCnetworkingential *cnetworkingential = [NSURLCnetworkingential cnetworkingentialForTrust: challenge.protectionSpace.serverTrust]; [challenge.sender useCnetworkingential:cnetworkingential forAuthenticationChallenge:challenge]; } } [challenge.sender continueWithoutCnetworkingentialForAuthenticationChallenge:challenge]; } 

esto difiere del usuario2179059 limitando la connection no segura a ese host solamente.

Espero que haya incluido el protocolo NSURLConnectionDelegate en la interfaz en el file .h?

 @interface ConnectionExampleViewController : UIViewController <NSURLConnectionDelegate>