NSURLErrorDomain Code=-1202 при использовании синхронного запроса
Я пытаюсь отправить синхронный запрос и получил ошибку ниже.
Ошибка Domain=NSURLErrorDomain Code=-1202 "Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который притворяется" xx.xxxx.com ", что может поставить под угрозу вашу конфиденциальную информацию".
Пожалуйста, найдите код ниже
NSURL *url=[[NSURL alloc]initWithString:strURL];
NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:url];
[url release];
[request setTimeoutInterval:90];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:dataForChallenge];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSURLResponse *resp = nil;
NSError *err = nil;
NSData *response = [NSURLConnection sendSynchronousRequest: request returningResponse: &resp error: &err];
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
// NSLog(@"selector : %@",NSStringFromSelector(_cmd));
if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
// NSLog(@"selector 1: %@",NSStringFromSelector(_cmd));
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{
// NSLog(@"selector : %@",NSStringFromSelector(_cmd));
if( [[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust] )
{
// NSLog(@"selector 1: %@",NSStringFromSelector(_cmd));
return YES;
}
return NO;
}
Вышеуказанные два метода не вызывают, в моем случае я должен отправить только синхронный запрос.
Я использовал следующую строку, и она отлично работает, но AppStore отклонил мое приложение:
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
Как я могу это исправить?
1 ответ
Либо вы используете асинхронную версию NSURLConnection
методы (которые позволяют вам указать делегата) или вы используете подобный прием для обработки асинхронного вызова, как если бы это был вызов синхронизации.
РЕДАКТИРОВАТЬ:
об использовании асинхронной версии NSURLConnection
что я имел ввиду
self.connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self];
(Вам нужно иметь сильное свойство NSURLConnection*).