我使用Alamofire在许多类中建立网络,例如:UserApi,EpayApi,DeliveryApi等。在我的请求看起来像这样:
Alamofire
.request(MyRouter.login(login, password))
.responseJSON { response in
//
}
问题是我们的SSL证书已在服务器上过期 - 这只是暂时的,但我想让Alamofire允许呼叫请求,即使是无效的证书。
我在stackoverflow找到了以下答案:
static var manager : SessionManager = {
// Create the server trust policies
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"my server url": .disableEvaluation
]
// Create custom manager
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
let manager = Alamofire.SessionManager(
configuration: URLSessionConfiguration.default,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
return manager
}()
这段代码完美无缺,但问题是我必须在每个类中使用新的SessionManager而不是Alamofire单例。有没有办法全球改变Alamofire的serverTrustPolicyManager?
使用Alamofire v4.3.0和Swift v3.0。
只需创建类并将其称为“NetManager”,其中包含类型为SessionManager的静态var。
class NetManager {
static var manager : SessionManager = {
// Create the server trust policies
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"my server url": .disableEvaluation
]
// Create custom manager
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
let manager = Alamofire.SessionManager(
configuration: URLSessionConfiguration.default,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
return manager
}()
}
然后像这样使用它:
NetManager.manager
.request(MyRouter.login())
.responseJSON { response in
//
}