Request to web service over SSL
ios, ios6, nsmutableurlrequest, objective-c
Solution
You should add below delegate methods to your communication class.
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
if ([YOUR_HOST isEqualToString:challenge.protectionSpace.host])
{
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
}
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
Problem
i am struggling to request web service using https. I am getting this kind of error: ``` An error occured : The certificate for this server is invalid. You might be connecting to a server that is pretending to be “SERVER_ADDRESS” which could put your confidential information at risk. ``` I am not using NSUrlConnectionDelegate. Here is my method: ``` - (void)sendRequestWithUrl:(NSURL*)url block:(void (^)(NSDictionary *dict, NSError *error)) block{ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; NSError* err = nil; NSHTTPURLResponse* rsp = nil; // Perform the request synchronously on this thread NSData *rspData = [NSURLConnection sendSynchronousRequest:request returningResponse:&rsp error:&err]; if (rspData && err == nil) { NSDictionary *result = [NSJSONSerialization JSONObjectWithData:rspData options:NSJSONReadingMutableLeaves error:&err]; if(result) { block(result, err); } else { block(nil, err); } }else{ DLog(@"Requesting URL: %@ An error occured : %@",url,[err localizedDescription]); block(nil, err); } } ``` How i could solve this problem ?