Search code examples
iosswiftcachingalamofire

How to disable caching in Alamofire


When I send a GET request twice with Alamofire I get the same response but I'm expecting a different one. I was wondering if it was because of the cache, and if so I'd like to know how to disable it.


Solution

  • swift 3, alamofire 4

    My solution was:

    creating extension for Alamofire:

    extension Alamofire.SessionManager{
        @discardableResult
        open func requestWithoutCache(
            _ url: URLConvertible,
            method: HTTPMethod = .get,
            parameters: Parameters? = nil,
            encoding: ParameterEncoding = URLEncoding.default,
            headers: HTTPHeaders? = nil)// also you can add URLRequest.CachePolicy here as parameter
            -> DataRequest
        {
            do {
                var urlRequest = try URLRequest(url: url, method: method, headers: headers)
                urlRequest.cachePolicy = .reloadIgnoringCacheData // <<== Cache disabled
                let encodedURLRequest = try encoding.encode(urlRequest, with: parameters)
                return request(encodedURLRequest)
            } catch {
                // TODO: find a better way to handle error
                print(error)
                return request(URLRequest(url: URL(string: "http://example.com/wrong_request")!))
            }
        }
    }
    

    and using it:

    Alamofire.SessionManager.default
                .requestWithoutCache("https://google.com/").response { response in
                    print("Request: \(response.request)")
                    print("Response: \(response.response)")
                    print("Error: \(response.error)")
            }