Je suis un peu novice en Objective-C mais je suis tombé sur un problème que je n'arrive pas à résoudre, principalement parce que je ne suis pas sûr d'implémenter la solution correctement.
J'essaie de me connecter à l'aide d'une connexion synchrone à un site https avec un certificat auto-signé. J'obtiens le message
Erreur Domain=NSURLErrorDomain Code=-1202 "certificat de serveur non approuvé".
Erreur pour laquelle j'ai vu quelques solutions sur ce forum. La solution que j'ai trouvée est d'ajouter :
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
au délégué NSURLD pour accepter tous les certificats. Lorsque je me connecte au site en utilisant uniquement un :
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://examplesite.com/"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
Cela fonctionne bien et je vois que le défi est accepté. Cependant, lorsque j'essaie de me connecter en utilisant la connexion synchrone, j'obtiens toujours l'erreur et je ne vois pas les fonctions du défi être appelées lorsque je mets la journalisation.
Comment puis-je faire en sorte que la connexion synchrone utilise les méthodes de défi ? Cela a-t-il quelque chose à voir avec la partie delegate:self de l'URLConnection ? Je dispose également d'un système d'enregistrement pour l'envoi et la réception de données dans le délégué NSURLD qui est appelé par ma fonction de connexion mais pas par la fonction synchrone.
Ce que j'utilise pour la partie synchrone :
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:@"https://examplesite.com/"]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [[NSString stringWithString:@"username=mike"] dataUsingEncoding: NSUTF8StringEncoding]];
dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"%@", error);
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
NSLog(@"%@", stringReply);
[stringReply release];
NSLog(@"Done");
Comme je l'ai mentionné, je suis un peu novice en matière d'objectif C, alors soyez gentil :)
Merci pour toute aide. Mike