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
类型捕获的request
是URLRequest
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 上的主要内容,如果未能解决你的问题,请参考以下文章