ios - NSURLErrorDomain Code=-1202 使用同步请求时

标签 ios objective-c nsurlconnection nsurlrequest nsurlerrordomain

我尝试发送同步请求并收到以下错误。

Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “xx.xxxx.com” which could put your confidential information at risk."



请在下面找到代码
    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]];

我怎样才能解决这个问题?

最佳答案

要么使用异步版本的NSURLConnection方法(允许您指定委托(delegate))或使用 trick like this处理异步调用,就好像它是同步调用一样。

编辑:

关于使用 NSURLConnection 的异步版本,我的意思是:

self.connection = [[NSURLConnection alloc] initWithRequest:request
                                 delegate:self];

(你需要有一个 NSURLConnection* 强属性)。

关于ios - NSURLErrorDomain Code=-1202 使用同步请求时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858835/

相关文章:

ios - 用cornerRadius四舍五入,但如果我只做底部的两个它会中断我的UITableView上的滚动

ios - 如何制作可点击的uiimage?

ios - 如何在iOS中从字符串中剪切字符串为“abc”

objective-c - NSURLConnection FTP 文件上传

ios - 如何在 IOS 中检查所有 NSURLConnections 的 SSL 证书

ios - 从iOS应用程序检测对象期间图像模糊

ios - 我可以用 Xcode 模拟器测试显着变化吗?

android - 获取超过 90 天的 crashlytics 报告

objective-c - UITableView 以编程方式选择选项

ios - 使用 session 过期处理 iOS HTTPRequest