未为 iOS 上的 POST 请求设置超时间隔
Posted
技术标签:
【中文标题】未为 iOS 上的 POST 请求设置超时间隔【英文标题】:Timeout interval not set for POST requests on iOS 【发布时间】:2021-12-30 03:46:42 【问题描述】:我通过此代码将所有请求的 timeOutInterval 设置为 30 秒:
class DefaultAlamofireSession: Alamofire.Session
static let shared: DefaultAlamofireSession =
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30
configuration.timeoutIntervalForResource = 30
return DefaultAlamofireSession(configuration: configuration)
()
在测试时,我注意到只有我的 GET 请求在 30 秒时超时。我的 POST 请求仍在使用默认间隔,即 60 秒。
谁能解释为什么并可能告诉我如何使 POST 请求也超时 60 秒?
非常感谢, 辣椒粉
【问题讨论】:
【参考方案1】:URLSessionConfiguration.timeoutIntervalForRequest
并没有按照你的想法去做。来自 Apple 的文档:
此属性根据此配置确定会话中所有任务的请求超时间隔。请求超时间隔控制任务在放弃之前应该等待额外数据到达的时间(以秒为单位)。每当有新数据到达时,与此值关联的计时器就会重置。当请求定时器达到指定的时间间隔而没有收到任何新数据时,就会触发超时。
因此该属性仅控制响应Data
的超时之间 块。这通常不是你想要的。相反,您想直接设置URLRequest.timeoutInterval
,这可以满足您的更多需求。
如果在连接尝试期间请求保持空闲的时间超过超时间隔,则认为该请求已超时。默认超时间隔为 60 秒。
如您所见,此超时适用于连接尝试,这是大多数人认为的请求超时。
您可以通过将RequestAdapter
应用于您的自定义Session
,在Alamofire 中自定义此值。或者,您可以使用各种 request*
方法上可用的 requestModifier
闭包。
【讨论】:
非常感谢您的回答。您能否举一个代码示例说明如何使用 RequestAdapter 或 requestModifier 来做到这一点?以上是关于未为 iOS 上的 POST 请求设置超时间隔的主要内容,如果未能解决你的问题,请参考以下文章