【问题标题】:Timeout interval not set for POST requests on iOS未为 iOS 上的 POST 请求设置超时间隔
【发布时间】: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 秒?

非常感谢, 辣椒粉

【问题讨论】:

    标签: ios swift timeout alamofire moya


    【解决方案1】:

    URLSessionConfiguration.timeoutIntervalForRequest 并没有按照你的想法去做。来自 Apple 的文档:

    此属性根据此配置确定会话中所有任务的请求超时间隔。请求超时间隔控制任务在放弃之前应该等待额外数据到达的时间(以秒为单位)。每当有新数据到达时,与此值关联的计时器就会重置。当请求定时器达到指定的时间间隔而没有收到任何新数据时,就会触发超时。

    因此该属性仅控制响应Data 的超时之间 块。这通常不是你想要的。相反,您想直接设置URLRequest.timeoutInterval,这可以满足您的更多需求。

    如果在连接尝试期间请求保持空闲的时间超过超时间隔,则认为该请求已超时。默认超时间隔为 60 秒。

    如您所见,此超时适用于连接尝试,这是大多数人认为的请求超时。

    您可以通过将RequestAdapter 应用于您的自定义Session,在Alamofire 中自定义此值。或者,您可以使用各种 request* 方法上可用的 requestModifier 闭包。

    【讨论】:

    • 非常感谢您的回答。您能否举一个代码示例说明如何使用 RequestAdapter 或 requestModifier 来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多