Загрузка не удалась с ошибкой Ошибка Domain=NSURLErrorDomain Code=-999 "отменено"
Я получаю это
"загрузка не удалась с ошибкой Ошибка Domain=NSURLErrorDomain Code=-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= ("LocalDataTask <91C7555E-F6E6-45EB-локальный_каталог_каталог_очистки_каталог_каталог_каталог_каталог_каталог_очистки_экземпляра_экземпляра для хранения файлов). <91C7555E-F6E6-45EB-9762-EE61915719DE>.<1>, NSLocalizedDescription= отменено} [-999]
2 ответа
Похоже, что вызов API использует политику безопасности закрепления сертификатов. При сбое закрепления сертификата задача данных вернется с NSLocalizedDescription=cancelled
, Проверить ServerTrustPolicy.certificates()
и убедитесь, что он возвращает действительные данные сертификата - обычно он автоматически загружает любые сертификаты, которые находятся в одном и том же пакете. Если нет, обязательно загрузите его вручную
Я столкнулся с той же проблемой и обнаружил, что мой новый сертификат не загружаетсяServerTrustPolicy.certificates()
. Оказалось, что мне нужен сертификат, закодированный DER (Distinguished Encoding Rules), и у меня был сертификат PEM.
Чтобы преобразовать PEM в DER, я использовал следующее и успешно добавил новый сертификат.
openssl x509 -outform der -in certificatename.pem -out certificatename.der