Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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") 
like image 531
Rene Limberger Avatar asked Aug 05 '14 16:08

Rene Limberger


People also ask

How do I pass the header in Alamofire?

For headers that change from request to request, you can pass them directly to the request method. From the docs: Adding a custom HTTP header to a Request is supported directly in the global request method. This makes it easy to attach HTTP headers to a Request that can be constantly changing.

Should I use Alamofire or URLSession?

Alamofire and URLSession both help you to make network requests in Swift. The URLSession API is part of the foundation framework, whereas Alamofire needs to be added as an external dependency. Many developers doubt whether it's needed to include an extra dependency on something basic like networking in Swift.

How do I use Alamofire in SwiftUI?

Adding Alamofire Into Our ProjectLaunch a new Xcode, SwiftUI based project and add the Alamofire dependency. You can use Cocoapods, Swift Package Manager or Carthage, whichever works the best for you. Once that's done, simply import Alamofire into your Swift class.


2 Answers

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

like image 135
Nikola Lajic Avatar answered Oct 13 '22 10:10

Nikola Lajic


For headers that change from request to request, you can pass them directly to the request method. From the docs:

Adding a custom HTTP header to a Request is supported directly in the global request method. This makes it easy to attach HTTP headers to a Request that can be constantly changing.

And the example given:

    let headers = [         "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",         "Content-Type": "application/x-www-form-urlencoded"     ]      Alamofire.request(.GET, "https://httpbin.org/get", headers: headers)              .responseJSON { response in                  debugPrint(response)              } 

If, however, you wish to set headers that do not change, it is recommended that you do so on the NSURLConfiguration object, as others have mentioned here.

like image 26
kcstricks Avatar answered Oct 13 '22 08:10

kcstricks