Set timeout in Alamofire

后端 未结 14 1149
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-01 03:33

I am using Alamofire 4.0.1 and I want to set a timeout for my request. I tried the solutions gived in this question:

In the first case

相关标签:
14条回答
  • 2020-12-01 04:01

    Based on Letaief Achraf's answer, but for Swift 5.0 and Alamofire pod version >= 5.0.0

    //MARK: - Session Manager
    private static var alamofireManager: Session? = {
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 10
        let alamofireManager = Session(configuration: configuration)
        return alamofireManager
    }()
    

    Use this variable inside an APIManager or something similar.

    0 讨论(0)
  • 2020-12-01 04:01

    In Swift 5. You can do in this way.

    AF.sessionConfiguration.timeoutIntervalForRequest = 60
    
    0 讨论(0)
  • 2020-12-01 04:02

    It's works for me:

    let url:String = "http://..."
    let request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("Kirk Hamet", forHTTPHeaderField:"name")
    request.timeoutInterval = 23 //Second
    
    Alamofire.request(request).responseJSON {
                    response in
        if response.result.isSuccess == true {
    
        }else{
    
        }
    
    }
    

    Swift 4.1

    0 讨论(0)
  • 2020-12-01 04:08

    If you are using one instance of Alamofire, you can make a lazy var like this:

       private lazy var alamoFireManager: SessionManager? = {
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 5
        configuration.timeoutIntervalForResource = 5
        let alamoFireManager = Alamofire.SessionManager(configuration: configuration)
        return alamoFireManager
    
    }()
    

    Works on Swift 4.2

    0 讨论(0)
  • 2020-12-01 04:12

    Based in @kamal-thakur response.

    Swift 3:

    var request = URLRequest(url: NSURL.init(string: "YOUR_URL") as! URL)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.timeoutInterval = 10 // 10 secs
    let postString = "param1=\(var1)&param2=\(var2)"
    request.httpBody = postString.data(using: .utf8)
    Alamofire.request(request).responseJSON {
        response in
        // do whatever you want here
    }
    
    0 讨论(0)
  • 2020-12-01 04:14

    after a lot of try I made it whit the next:

    var timeout = 300 // 5 minutes
    
    //Post values
        let parameters:Parameters = parameters
    
        //Server value
        let url:URL = (url)
    
    
        //Make the request
        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForResource = TimeInterval(timeout)
        configuration.timeoutIntervalForRequest = TimeInterval(timeout)
    
        let sessionManager = Alamofire.SessionManager(configuration: configuration)
    
         sessionManager.request(url,parameters:parameters).validate(statusCode: 200..<300).responseJSON { response in
    
    
            print(response.request)  // original URL request
            print(response.response) // URL response
    
            print(sessionManager.session.configuration.timeoutIntervalForRequest)   // result of response time
            print(response.timeline.totalDuration)
    
    
            switch response.result {
            case .success:
    
                if let valJSON = response.result.value {
    
    
                   //use your json result 
    
    
    
                }
    
            case .failure (let error):
    
                print("\n\nAuth request failed with error:\n \(error)")
    
            }
        }
    

    I hope it helps ;)

    0 讨论(0)
提交回复
热议问题