2016-11-22 129 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为您的班级的全球属性。

相关问题