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
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.
In Swift 5. You can do in this way.
AF.sessionConfiguration.timeoutIntervalForRequest = 60
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
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
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)¶m2=\(var2)"
request.httpBody = postString.data(using: .utf8)
Alamofire.request(request).responseJSON {
response in
// do whatever you want here
}
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 ;)