2016-11-22 113 views
0

我使用Alamofire進行https連接。Alamofire 4使用Swift 3.0失敗:錯誤域= NSURLErrorDomain代碼= -999「取消」

但是在Alamofire進行測試時,我得到這個錯誤:

URLError occurred: URLError(_nsError: Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=https://192.168.X.XX/VMSSite/Handlers/Common/iOSServer.ashx?RegID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=https://192.168.X.XX/VMSSite/Handlers/Common/iOSServer.ashx?RegID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}) status code: nil 

我的來源是這樣的:

var defaultManager = Alamofire.SessionManager.default 
      let serverTrustPolicies: [String: ServerTrustPolicy] = [ 
       "192.168.X.XX:443": .disableEvaluation, 
       "192.168.X.XX": .disableEvaluation 
      ] 

    let configuration = URLSessionConfiguration.default 
     configuration.timeoutIntervalForRequest = 30 //seconds 
     configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders 

     //defaultManager = SessionManager(configuration: configuration, delegate: SessionDelegate(), serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)) 
     defaultManager = SessionManager(configuration: configuration, serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)) 

     defaultManager.request("https://192.168.X.XX/VMSSite/Handlers/Common/iOSServer.ashx?RegID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", method: .post, parameters: nil, encoding: JSONEncoding.default).responseJSON { response in 
      debugPrint(response) 

    var statusCode = response.response?.statusCode 

     if let error = response.result.error as? AFError { 
      statusCode = error._code // statusCode private 
      switch error { 
      case .invalidURL(let url): 
       print("Invalid URL: \(url) - \(error.localizedDescription)") 
      case .parameterEncodingFailed(let reason): 
       print("Parameter encoding failed: \(error.localizedDescription)") 
       print("Failure Reason: \(reason)") 
      case .multipartEncodingFailed(let reason): 
       print("Multipart encoding failed: \(error.localizedDescription)") 
       print("Failure Reason: \(reason)") 
      case .responseValidationFailed(let reason): 
       print("Response validation failed: \(error.localizedDescription)") 
       print("Failure Reason: \(reason)") 

       switch reason { 
       case .dataFileNil, .dataFileReadFailed: 
        print("Downloaded file could not be read") 
       case .missingContentType(let acceptableContentTypes): 
        print("Content Type Missing: \(acceptableContentTypes)") 
       case .unacceptableContentType(let acceptableContentTypes, let responseContentType): 
        print("Response content type: \(responseContentType) was unacceptable: \(acceptableContentTypes)") 
       case .unacceptableStatusCode(let code): 
        print("Response status code was unacceptable: \(code)") 
        statusCode = code 
       } 
      case .responseSerializationFailed(let reason): 
       print("Response serialization failed: \(error.localizedDescription)") 
       print("Failure Reason: \(reason)") 
       // statusCode = 3840 ???? maybe.. 
      } 

      print("Underlying error: \(error.underlyingError)") 
     } else if let error = response.result.error as? URLError { 
      print("URLError occurred: \(error)") 
     } else { 
      print("Unknown error: \(response.result.error)") 
     } 

     print("status code: \(statusCode)") // the status code 
    } 
} 

我用斯威夫特3 Alamofire 4.0從xcode8.1分支。 請幫幫我。

而且

如何爲動態主機名設置例外域值在ATS?

注意:如果我在此代碼中使用bypassURLAuthentication,則它可以正常使用https。但根據帖子here bypassURLAuthentication不建議用於PRODUCTION。所以我需要幫助來解決這個問題。

+0

請參閱http://stackoverflow.com/a/42985488/746347 – mixel

回答

0

使用本: -

Alamofire.request("https://192.168.X.XX/VMSSite/Handlers/Common/iOSServer.ashx?RegID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", method: .post, parameters: nil, headers: nil).responseJSON { (response:DataResponse<Any>) in 

switch(response.result) { 
      case .success(_): 
       if let data = response.result.value{ 
      print("your response data \(response.data!)") 

       } 
       break 

      case .failure(_): 
       print(response.result.error) 


       break 

      } 


} 
+0

我曾試過這個,但想用SSL(serverTrustPolicies)做出請求,這就是爲什麼我不能使用Alamofire.request,如果你看到我的代碼我曾經使用sessionmanager調用請求,我得到這個錯誤。 –

0

使您的defaultManager爲您的班級的全球屬性。

相關問題