【问题标题】:Alamofire set timeout only for specific a request [closed]Alamofire 仅为特定请求设置超时[关闭]
【发布时间】:2020-04-15 05:56:05
【问题描述】:

我正在使用 Alamofire 发送请求,如下所示。我需要知道如何仅为这样的特定请求设置超时

Alamofire.request(URL, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).validate().responseJSON { (response) in switch response.result {

////

}

【问题讨论】:

标签: ios swift alamofire alamofire-request


【解决方案1】:

尝试为该特定请求创建会话管理器

let sessionManager: SessionManager = {
    var sessionManager = SessionManager()
    let configuration = URLSessionConfiguration.default
    configuration.timeoutIntervalForRequest = 30  //timeout can be changed from here
    sessionManager = Alamofire.SessionManager(configuration: configuration)
    return sessionManager
}()

并使用此sessionManager 进行通话。

sessionManager.request(url, method: .get, parameters: params)...

【讨论】:

  • 问题:它将适用于所有请求。
  • @DuyPhan 否。它只会将配置应用于使用 sessionManager.request 的请求。其他请求仍然可以使用Alamofire.request
【解决方案2】:

对于特定的 url 或请求,使用 timeoutInterval 超时。

if let url = NSURL.init(string: "YOUR_URL") {
        var request = URLRequest(url: url as URL)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        if let myUrl = NSURL.init(string: "SPECIFIC_URL"),
            myUrl.isEqual(url) {
            request.timeoutInterval = 10 // 10 secs
        }

        let postString = "param1=\(var1)&param2=\(var2)"
        request.httpBody = postString.data(using: .utf8)
        Alamofire.request(request).responseJSON { response in
            ///  handle response here
        }
    }

根据git hub validate() 检查状态代码是否在200..<300 范围内,并且响应的Content-Type 标头与请求的Accept 标头匹配(如果提供了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多