我的项目info.plist中有以下设置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
但仅使用沃达丰移动数据仍然出现以下错误:
NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9806) 错误详细信息:错误域= NSURLErrorDomain代码= -1200&#34;发生SSL错误,无法建立与服务器的安全连接。&#34; UserInfo = {_ kCFStreamErrorCodeKey = -9806,NSLocalizedRecoverySuggestion =您是否还要连接到服务器?,NSUnderlyingError = 0x17004dfb0 {错误域= kCFErrorDomainCFNetwork代码= -1200&#34;(null)&#34; UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0,_kCFNetworkCFStreamSSLErrorOriginalValue = -9806,_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9806}},NSLocalizedDescription =发生SSL错误,无法建立与服务器的安全连接。,NSErrorFailingURLKey = https://v1.xyz.net:8080/signup/, NSErrorFailingURLStringKey = https://v1.xyz.net:8080/signup/,_ kCFStreamErrorDomainKey = 3}
更新 这是我的代码:
NSString *jsonRequest=@"JSON";
NSURL *baseURL = [NSURL URLWithString:@"https://v1.xyz.net:8080/signup/"];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.requestCachePolicy=NSURLRequestReloadIgnoringLocalCacheData;
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSData *postData = [NSJSONSerialization JSONObjectWithData:[jsonRequest dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
[request setURL:baseURL];
[request setHTTPBody:postData];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@",responseObject);
} else {
// error code here
NSLog(@"Error %@",error);
}
}];
[postDataTask resume];
答案 0 :(得分:1)
问题来自移动运营商,他们通过端口8080阻止了https,因此我们将端口更改为使用标准https端口443并且运行良好。
我们使用以下步骤来调查此问题:
1-检查我们的服务器证书: $ openssl s_client -connect https://v1.xyz.net:8080/signup/
2-使用nscurl工具诊断ATS连接问题: / usr / bin / nscurl --ats-diagnostics --verbose https://v1.xyz.net:8080/signup/
答案 1 :(得分:-1)
只需禁用ATS,您可以通过打开Info.plist按照以下步骤操作,并添加以下行:
<key>NSAppTransportSecurity</key>
<dict> <key>NSAllowsArbitraryLoads</key> <true/>
</dict>
如果仍然存在同样的问题,则服务器上的证书未经授权CA签名。所以有这种问题的人检查证书在服务器端是否有效。