iOS HTTPS 请求 Code=-999 "cancelled"

2020-02-18 15:38:46 浏览数 (1)

使用AFN请求网络一直好好的,无论是http,还是https都正常,突然有一天服务器那边不知道调整了什么(可能是服务器SSL证书到期),每次请求都是返回:

Error Domain=NSURLErrorDomain Code=-999 "cancelled"

简书

因为一直使用的是正常申请的https证书,主要是现在用自建证书的公司越来越少了,除了部分个人为了玩。。。因为很多地方都提供免费的。。。所以基本iOS端从http切换到https并不需要什么工作直接换就行。 但是如果出现了如上错误可以简单的设置APP端直接信任证书就好:

方法一、一般就是设置AFHTTPSessionManagersecurityPolicy

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!))
}

0 人点赞