连接到自签名服务器时出现以下错误。
错误Domain = NSURLErrorDomain代码= -1202“此服务器的证书无效。您可能正在连接到假装为“ maskeddomain.com”的服务器,这可能会使您的机密信息受到威胁。UserInfo = 0x7fb6dec259e0 {NSURLErrorFailingURLPeerTrustErrorKey =,NSLocalizedRecoverySuggestion =您是否仍然要连接到服务器?,_kCFStreamErrorCodeKey = -9813,NSUnderlyingError = 0x7fb6dbe0dd90“操作无法完成。”(kCFError120。
看起来Alamofire 1.3(https://github.com/Alamofire/Alamofire#security)允许禁用此验证。有人实施过吗?我在快速项目中使用的是Alamofire API,不确定是否需要在确切位置实施“服务器信任策略管理器”。请指教。
有一种方法可以更改Alamofire管理器共享实例的服务器信任策略,但是不建议这样做。相反,您应该创建自己的定制管理器实例。这是推荐的解决方案,代码是 swift-2.0分支中的* 带有Alamofire的 Swift 2.0 ,在 Xcode7 beta 5中进行了 编译。 *
创建管理器的定制实例
因为您不会在Alamofire上使用 request 方法,而是在自定义管理器上使用 request 方法,所以您需要考虑将管理器存储在何处。我要做的是将其作为静态存储在我的网络包装器中(该类使用Alamofire并处理我的应用程序网络需求)。我这样设置:
private static var Manager : Alamofire.Manager = { // Create the server trust policies let serverTrustPolicies: [String: ServerTrustPolicy] = [ "maskeddomain.com": .DisableEvaluation ] // Create custom manager let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders let man = Alamofire.Manager( configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) ) return man }()
下一步是切换所有Alamofire.request()与一起使用的呼叫Manager.request(),因此您应该具有以下内容:
Alamofire.request()
Manager.request()
Manager.request(.GET, "http://stackoverflow.com").responseJSON( completionHandler: { (_, respose, result) -> Void in if result.isSuccess { // enjoy your success } else if result.isFailure { // deal with your failure } })
如果仍然要更改管理器的共享实例,请转到此处以获取更多信息。