这个问题遍布 Stack Overflow,过去 2 天我一直在尝试无数的 ATP 配置组合并让我的应用程序正常工作。我将彻底解决我的问题,因为看起来最微小的事情都会影响如何解决这个问题。
我最近刚刚设置了一个启用了 SSL 和 TLS 1.2 的 Ubuntu 14 服务器。在我的服务器上是我的应用程序所依赖的服务器端脚本。在我的应用程序中,我使用 NSMutableURLRequest 从服务器请求我的 API,如下所示:
NSString * noteDataString = [NSString stringWithFormat:@"email=%@&password=%@&type=%@", companyEmail, companyPassword, @"login"];
NSData * postData = [noteDataString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString * postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://mydomain.me:443/path/to/file.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSHTTPURLResponse * urlResponse = nil;
NSError * error = nil;
NSData * responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
NSString * result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"Response Code: %ld", (long)[urlResponse statusCode]);
当我将 url 复制到 Chrome 中时,会显示正确的 PHP 返回。在 iOS 9 上从 Xcode 7 请求时,我收到此错误:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
我已经使用了无数 info.plist 设置,就像在类似问题中看到的那样。我尝试禁用前向保密,尝试启用任意加载,尝试使用异常域 mydomain.me 及其子域。我取得的唯一进展是错误代码 -9813 切换到 -9802。
我知道为 NSURLRequest 添加委托方法,但这些方法从未被调用并被认为是解决此问题的多余方法。
我使用 localhost 和 http 在 MAMP 服务器上构建了很多应用程序,然后当我启用任意加载时请求工作,所以我的 plist 没有问题。
令人难以置信的是为什么我有一个特殊情况,而且我知道 Stack Overflow 就是这种情况的地方!
谢谢,我希望这在解决后能帮助更多的开发人员。