更改 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的主要内容,如果未能解决你的问题,请参考以下文章

在运行时更改方向更改 ViewControllers

UIScrollView 更改 contentOffset 时更改框架

HAC集群更改IP(单节点更改全部节点更改)

HAC集群更改IP(单节点更改全部节点更改)

设备方向更改时更改 UIImage

phpmyadmin 在更改任何值时更改日期