使用AFN请求网络一直好好的,无论是http,还是https都正常,突然有一天服务器那边不知道调整了什么(可能是服务器SSL证书到期),每次请求都是返回:
Error Domain=NSURLErrorDomain Code=-999 "cancelled"
简书
因为一直使用的是正常申请的https证书,主要是现在用自建证书的公司越来越少了,除了部分个人为了玩。。。因为很多地方都提供免费的。。。所以基本iOS端从http切换到https并不需要什么工作直接换就行。 但是如果出现了如上错误可以简单的设置APP端直接信任证书就好:
方法一、一般就是设置AFHTTPSessionManager
的securityPolicy
OC:
代码语言:javascript复制AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
// 客户端是否信任非法证书
securityPolicy.allowInvalidCertificates = YES;
// 是否在证书域字段中验证域名
securityPolicy.validatesDomainName = NO;
manager.securityPolicy = securityPolicy
Swift:
代码语言:javascript复制let manager = AFHTTPSessionManager()
let securityPolicy = AFSecurityPolicy.default()
//客户端是否信任非法证书
securityPolicy.allowInvalidCertificates = true
// 是否在证书域字段中验证域名
securityPolicy.validatesDomainName = false
manager.securityPolicy = securityPolicy
方法二、如果你的网络请求类也和我一样是直接继承的AFHTTPSessionManager
那么也可以重写下面的方法来解决 OC:
代码语言:javascript复制- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler {
//不校验证书 - 信任所有证书
completionHandler(NSURLSessionAuthChallengeUseCredential, [[NSURLCredential alloc] initWithTrust:challenge.protectionSpace.serverTrust])
}
swift:
代码语言:javascript复制public override func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
//不校验证书 - 信任所有证书
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}