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*).

Другие вопросы по тегам