加载失败,出现错误错误域=NSURLErrorDomain代码=-999“已取消”

问题描述 投票:0回答:2

我明白了

“加载失败,错误错误域=NSURLErrorDomain代码=-999“已取消””

当尝试在我的自定义框架中调用 api 时。但是当我在另一个项目中运行相同的代码时,它工作正常并给出正确的响应。下面是我的代码。有什么我必须在自定义框架中做的事情在正常项目中不需要吗?

func invokePostWebServiceCallLogin(request : String,param : NSDictionary,completion : @escaping (_ webResponse : WebserviceResponseClass) ->Void) -> Void {

        let headers = [
            "Accept": "application/json",
            "Content-Type": "application/x-www-form-urlencoded"
        ]
        let passingParameter : [ String : AnyObject] = param as! [String : AnyObject]

        UIApplication.shared.isNetworkActivityIndicatorVisible = true

        WebServiceHelperClass.Manager.request(URL(string: request)!, method: .post, parameters: passingParameter,encoding: URLEncoding.default, headers: headers).validate().responseJSON {
            response in
            UIApplication.shared.isNetworkActivityIndicatorVisible = false

            switch response.result {
            case .success:
                let webResult =  WebserviceResponseClass()
                webResult.isSuccess = true
                webResult.responseData = response.data as NSData?
                webResult.error = nil
                completion(webResult)
                break
            case .failure(let error):
                let webResult =  WebserviceResponseClass()
                webResult.isSuccess = false
                webResult.responseData = nil
                webResult.error = error as NSError
                completion(webResult)
            }
        }
    }

    private static var Manager : Alamofire.SessionManager = {
         let    serverTrustPolicies: [String: ServerTrustPolicy] = [
                "dev.xxxxx.com": .pinCertificates(
                    certificates: ServerTrustPolicy.certificates(),
                    validateCertificateChain: true,
                    validateHost: true
            ),
                "xx.xx.xxx.xx": .disableEvaluation
            ]

        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 45
        configuration.timeoutIntervalForResource = 45

        let manager = Alamofire.SessionManager(
            configuration: configuration,
            serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
        )
        return manager
    }

任务<91C7555E-F6E6-45EB-9762-EE61915719DE>。<1>加载失败,出现错误错误域=NSURLErrorDomain代码=-999“已取消”UserInfo={NSErrorFailingURLStringKey=https://dev.xxxxxxxx.com:xxxx/api/VirtualAPI/Login,NSErrorFailingURLKey=https: //dev.xxxxxxxx.com:xxxx/api/VirtualAPI/Login, _NSURLErrorRelatedURLSessionTaskErrorKey=( “本地数据任务<91C7555E-F6E6-45EB-9762-EE61915719DE>。<1>” ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <91C7555E-F6E6-45EB-9762-EE61915719DE>.<1>, NSLocalizedDescription=已取消} [-999]

ios swift alamofire xcode10 dynamic-frameworks
2个回答
7
投票

看起来 API 调用正在使用证书固定安全策略。 当证书锁定失败时,数据任务将返回并显示

NSLocalizedDescription=cancelled
。 检查
ServerTrustPolicy.certificates()
并查看它是否返回有效的证书数据 - 通常它会自动加载同一捆绑包中的任何证书。 如果没有,请确保手动加载


0
投票

我遇到了同样的问题,发现我的新证书没有被

ServerTrustPolicy.certificates()
加载。 原来我需要 DER(杰出编码规则)编码的证书,并且我有 PEM 证书。

要将 PEM 转换为 DER,我使用了以下内容并成功添加了新证书。

openssl x509 -outform der -in certificatename.pem -out certificatename.der
© www.soinside.com 2019 - 2024. All rights reserved.