这仅发生在iOS 11上。此外,它并不一致。在同一URL上的五个请求中,有两个会失败。在蜂窝连接上,它发生得不那么频繁,但仍然存在。任务<51E07EF5-6F31-4E58-8818-7712CB3E49A6>.<20> HTTP加载失败(错误代码:-999 [1:89]) 任务<51E07EF5-6F31-4E58-8818-7712CB3E49A6>.<20>以错误代码-999完成
我正在使用AFNetworking,并且像我所说的,这从未是问题,直到iOS 11。
有什么想法?
更新以添加更多细节:
我正在使用有效证书的SSL Pinning。我的info.plist文件如下:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>url.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
像这样使用SSL pinning:
NSString *pathToProdCert = [[NSBundle mainBundle]pathForResource:@"MY_CERT" ofType:@"cer"];
if(pathToProdCert){
manager.securityPolicy.pinnedCertificates = [NSSet setWithObjects[NSData dataWithContentsOfFile:pathToProdCert], nil];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
}
更新: 回应评论:下面是这个管理器的声明:
@property (nonatomic) AFHTTPSessionManager *manager;
经理对象是通过我的 Web 服务类的 init 方法进行初始化的:
-(instancetype)initWithBaseUrl:(NSURL *)url {
self = [super init];
if (self){
self.manager = [[AFHTTPSessionManager alloc] initWithBaseURL:url];
self.manager.responseSerializer = [AFHTTPResponseSerializer serializer];
}
return self;
}
每个应用程序会话只初始化一次。
更新:
根据要求,这是error
中的userInfo
:
NSErrorFailingURLKey = "https://MY_URL/PARAMS"; NSErrorFailingURLStringKey = "https://MY_URL/PARAMS"; NSLocalizedDescription = cancelled; NSUnderlyingError = "Error Domain=kCFErrorDomainCFNetwork Code=-999 \"(null)\" UserInfo={_kCFStreamErrorCodeKey=89, _kCFStreamErrorDomainKey=1}"; "_kCFStreamErrorCodeKey" = 89; "_kCFStreamErrorDomainKey" = 1;
经过更多测试,我注意到如果我在每个网络调用时重新创建网络类,在其中声明manager
,我就不会遇到这个错误。