更改Alamofire.SessionManager的serverTrustPolicy仍然使用Alamofire.request等顶级便捷方法

问题描述 投票:1回答:1

我使用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。

ios swift ssl alamofire
1个回答
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
    //
}
© www.soinside.com 2019 - 2024. All rights reserved.