更改 Alamofire.SessionManager 的 serverTrustPolicy 以仍然使用***便利方法,如 Alamofire.request
Posted
技术标签:
【中文标题】更改 Alamofire.SessionManager 的 serverTrustPolicy 以仍然使用***便利方法,如 Alamofire.request【英文标题】:Change serverTrustPolicy of Alamofire.SessionManager to still use top-level convenience methods like Alamofire.request 【发布时间】:2017-05-15 11:38:35 【问题描述】:我在许多类中使用 Alamofire 进行联网,例如:UserApi、EpayApi、DeliveryApi 等。我的请求在任何地方都是这样的:
Alamofire
.request(MyRouter.login(login, password))
.responseJSON response in
//
问题是我们的 SSL 证书在服务器上已过期 - 这只是暂时的,但是我想让 Alamofire 允许呼叫请求,即使证书无效。
我在 *** 找到了以下答案:
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。
【问题讨论】:
【参考方案1】:只需创建类并将其命名为“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
//
【讨论】:
以上是关于更改 Alamofire.SessionManager 的 serverTrustPolicy 以仍然使用***便利方法,如 Alamofire.request的主要内容,如果未能解决你的问题,请参考以下文章