【问题标题】:how to set request timeout in alamofire?如何在alamofire中设置请求超时?
【发布时间】:2017-07-11 18:09:27
【问题描述】:

我尝试使用 NSURLSession,但现在我想使用 Alamofire。

【问题讨论】:

    标签: swift alamofire


    【解决方案1】:

    这种方法在 swift 3 上对我有用

     let manager : SessionManager = {
            let config = URLSessionConfiguration.default
                config.timeoutIntervalForRequest = 15
                config.timeoutIntervalForResource = 15
            let mgr = Alamofire.SessionManager(configuration: config)
    
            return mgr
        }()
    

    从https://github.com/Alamofire/Alamofire#session-manager得到它

    【讨论】:

      【解决方案2】:

      如果您想要自定义超时,请在请求中设置值,或使用自定义配置创建自定义 URLSession:alamofire documentation

      let configuration = URLSessionConfiguration.default
      configuration.timeoutIntervalForRequest = 10 // seconds
      configuration.timeoutIntervalForResource = 10
      let sessionManager = Alamofire.SessionManager(configuration: configuration)
      

      //或

      var request = URLRequest(url: URL(string: "myApi.com/Api/login")!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 20)
      request.httpMethod = "GET"
      request.setValue("application/json", forHTTPHeaderField: "Content-Type")
      
      Alamofire.request("https://httpbin.org/get").responseJSON { response in
          print(response)
          if let json = response.result.value {
              print("JSON: \(json)")
          }
      }
      

      【讨论】:

        【解决方案3】:

        在 AppDelegate 的 application(_:didFinishLaunchingWithOptions:) 方法中调用此函数。

        func configureAlamofire() {
            Alamofire.SessionManager.default.session.configuration.timeoutIntervalForRequest = 15 // in seconds
            Alamofire.SessionManager.default.session.configuration.timeoutIntervalForResource = 15 // in seconds
        }
        

        【讨论】:

          【解决方案4】:
          let manager = Alamofire.SessionManager.default
          manager.session.configuration.timeoutIntervalForRequest = 120
          
          manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"])
                  .responseJSON {
                      response in
                      switch (response.result) {
                      case .success:
                          //do json stuff
                          break
                      case .failure(let error):
                          if error._code == NSURLErrorTimedOut {
                              //timeout here
                          }
                          print("\n\nAuth request failed with error:\n \(error)")
                          break
                      }
                  }
          

          【讨论】:

            【解决方案5】:

            对于新版本的Alamofire(5.0.0以上),这样写,

            AF.sessionConfiguration.timeoutIntervalForRequest = 120
            AF.sessionConfiguration.timeoutIntervalForResource = 120
            

            【讨论】:

              猜你喜欢
              • 2018-12-12
              • 2019-06-25
              • 2020-04-15
              • 2017-06-07
              • 1970-01-01
              • 1970-01-01
              • 2021-01-26
              • 2022-12-11
              • 2020-02-03
              相关资源
              最近更新 更多