swiftafnetworkingalamofire

how to use Alamofire with custom headers


I am just starting to take a look at Mattt's wonderful new Alamofire swift networking library and am not quite sure how one would use it with custom headers.

The code i am trying to convert from AFNetworking to Alamofire is this:

let request = NSMutableURLRequest(URL: url)
request.setValue(authorizationToken, forHTTPHeaderField:"Authorization")

Solution

  • According to the official documentation, modifying the session configuration is not recommended:

    This is not recommended for Authorization or Content-Type headers. Instead, use URLRequestConvertible and ParameterEncoding, respectively.

    So an example usage of URLRequestConvertible for authorization would be:

    enum Router: URLRequestConvertible {
        static let baseUrlString = "some url string"
    
        case Get(query: String)
    
        var URLRequest: NSMutableURLRequest {
            let (path: String, parameters: [String: AnyObject]?) = {
                switch self {
                case .Get(let query):
                    return ("/get", ["q": query])
                }
            }()
    
            let URL = NSURL(string: Router.baseUrlString)!
            let URLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
            // set header fields
            URLRequest.setValue("a", forHTTPHeaderField: "Authorization")
    
            let encoding = Alamofire.ParameterEncoding.URL        
            return encoding.encode(URLRequest, parameters: parameters).0
        }
    }
    

    and when you want to make a request:

    Manager.sharedInstance.request(Router.Get(query: "test"))
    

    More info about URLRequestConvertible: https://github.com/Alamofire/Alamofire#urlrequestconvertible

    Old Answer

    As of Alamofire v1.0 Pers answer no longer works. In the new version additional headers should be added to the HTTPAdditionalHeaders property of NSURLSessionConfiguration

    Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": authorizationToken]
    

    More info here: https://github.com/Alamofire/Alamofire/issues/111