Alamofire 的 Session timeOutInterval 和 cachePolicy 设置未反映在 URLRequest 上

Posted

技术标签:

【中文标题】Alamofire 的 Session timeOutInterval 和 cachePolicy 设置未反映在 URLRequest 上【英文标题】:Alamofire's Session timeOutInterval and cachePolicy setting is not reflected on URLRequest 【发布时间】:2021-12-22 22:07:09 【问题描述】:

努力了解 Alamofire (5.2.2) 如何为请求设置 timeOutInterval 和 cachePolicy。

我有以下设置:

// Create Alamofire Session with custom cache and timeout interval settings
let configuration = URLSessionConfiguration.af.default
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData
configuration.timeoutIntervalForRequest = 30
let session = Session(configuration: configuration)

// Create request and leaving request's timeout interval (60) and cache policy (rawValue - 0) on default.
let request = URLRequest(url: URL(string: "https://github.com")!)

// Fire request
session.request(request).response  response in
    print("### cachePolicy: \(response.request?.cachePolicy.rawValue)") // 0
    print("### timeoutInterval: \(response.request?.timeoutInterval)") // 60
    print("### session config: \(session.sessionConfiguration.timeoutIntervalForRequest)") // 30
    print("### session cachePolicy: \(session.sessionConfiguration.requestCachePolicy.rawValue)") // 1

这些配置选项的来源是什么?配置还是请求?URLSessionConfiguration 中定义的内容会被实际使用吗? 如果是,那是否也不会覆盖URLRequest 中的公共属性? 是否因为在将会话配置设置应用于请求之前复制了 URLRequest 实例而没有被覆盖?

【问题讨论】:

【参考方案1】:

Alamofire 的各种*Response 类型捕获的requestURLRequest Alamofire 在将其交给底层URLSession 实际执行之前看到的,因此它不会反映URLRequest 实际由任何任务执行。如果您需要该信息,您可以捕获 Alamofire 的 DataRequest 并查询 task?.currentRequest

let request = session.request(request)
response.response  response in 
    // Access request.task?.currentRequest

【讨论】:

以上是关于Alamofire 的 Session timeOutInterval 和 cachePolicy 设置未反映在 URLRequest 上的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire如何维护请求顺序?

Alamofire 4.0:timeoutIntervalForRequest

如何使用 Alamofire 关闭证书验证?

Alamofire 会话配置未反映在请求中

我如何使用 Alamofire 取消多个请求?

Alamofire超时无法在Swift 3中运行