-
-
Save cmoulton/ab674eb7bcb5aa1a0580fc8ba5176f6b to your computer and use it in GitHub Desktop.
| // MARK: - Adding a header to a single request | |
| func doRequestWithHeaders1() { | |
| let headers: HTTPHeaders = [ | |
| "X-Mashape-Key": MY_API_KEY, | |
| "Accept": "application/json" | |
| ] | |
| Alamofire.request("https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh", headers: headers) | |
| .responseJSON { response in | |
| debugPrint(response) | |
| } | |
| // MARK: - To make sure the headers are sent, use debugPrint on the request | |
| let request = Alamofire.request("https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh", headers: headers) | |
| .responseJSON { response in | |
| debugPrint(response) | |
| } | |
| debugPrint(request) | |
| } | |
| // MARK: - Adding headers to all requests in the session | |
| // store sessionManager so it doesn't get deallocated while we're waiting for the network call to finish | |
| var sessionManager: Alamofire.SessionManager? | |
| func doRequestWithHeaders2() { | |
| // get the default headers | |
| var headers = Alamofire.SessionManager.defaultHTTPHeaders | |
| // add your custom headers | |
| headers["API-Version"] = "2.0" | |
| headers["X-Mashape-Key"] = MY_API_KEY | |
| // create a custom session configuration | |
| let configuration = URLSessionConfiguration.default | |
| // add the headers | |
| configuration.httpAdditionalHeaders = headers | |
| // create a session manager with the configuration | |
| self.sessionManager = Alamofire.SessionManager(configuration: configuration) | |
| // make calls with the session manager | |
| sessionManager?.request("https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh") | |
| .responseJSON { response in | |
| debugPrint(response) | |
| } | |
| } | |
| // MARK: - Add headers when using a URLRequest | |
| func doRequestWithHeaders3() { | |
| if let url = URL(string: "https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh") { | |
| var urlRequest = URLRequest(url: url) | |
| urlRequest.httpMethod = HTTPMethod.get.rawValue | |
| urlRequest.addValue(MY_API_KEY, forHTTPHeaderField: "X-Mashape-Key") | |
| urlRequest.addValue("application/json", forHTTPHeaderField: "Accept") | |
| Alamofire.request(urlRequest) | |
| .responseJSON { response in | |
| debugPrint(response) | |
| } | |
| } | |
| } | |
| // Alternatively: | |
| func doRequestWithHeaders4() { | |
| if let url = URL(string: "https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh") { | |
| var urlRequest = URLRequest(url: url) | |
| urlRequest.httpMethod = HTTPMethod.get.rawValue | |
| var headers: HTTPHeaders | |
| if let existingHeaders = urlRequest.allHTTPHeaderFields { | |
| headers = existingHeaders | |
| } else { | |
| headers = HTTPHeaders() | |
| } | |
| headers["X-Mashape-Key"] = MY_API_KEY | |
| headers["Accept"] = "application/json" | |
| urlRequest.allHTTPHeaderFields = headers | |
| let request = Alamofire.request(urlRequest) | |
| .responseJSON { response in | |
| debugPrint(response) | |
| } | |
| debugPrint(request) | |
| } | |
| } | |
| // MARK: - Use an Alamofire RequestAdapter to add headers to all calls in the session | |
| class MashapeHeadersAdapter: RequestAdapter { | |
| func adapt(_ urlRequest: URLRequest) throws -> URLRequest { | |
| var urlRequest = urlRequest | |
| urlRequest.setValue(MY_API_KEY, forHTTPHeaderField: "X-Mashape-Key") | |
| urlRequest.setValue("application/json", forHTTPHeaderField: "Accept") | |
| return urlRequest | |
| } | |
| } | |
| func doRequestWithHeaders5() { | |
| // Then to make the call: | |
| // get a session manager and add the request adapter | |
| let sessionManager = Alamofire.SessionManager.default | |
| sessionManager.adapter = MashapeHeadersAdapter() | |
| // make calls with the session manager | |
| let request = sessionManager.request("https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh") | |
| .responseJSON { response in | |
| debugPrint(response) | |
| } | |
| debugPrint(request) | |
| } |
your book will change my life ... I can feel that and I will always be thankful to you for this. Thanks Christina ..
really good demo.
Hi small doubt
I have added a adapter to my session manager, so all my API calls will have headers I have set in adapt function.
Now I have a scenario where I have to add one extra field to header for a specific API call.
So if I add header in the request like this
Alamofire.request("https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh", headers: headers)
Will the headers I set in adapter be replaced entirely or will the new header params be added along with the previous header params?
Very nice ! Thanks !
@shashank19909 Sorry, just saw your question now. If you're adding an extra header field then it'll just add your field, it won't remove the existing ones.
Good one
nice
I found your examples to be a BIG Help. Here is one I am using that has "headers" for Yelp Authorization. Apparently Yelp very recently changed how they handle Authorization so not may examples exist as of this post time. So, here it is:
func doMashape() -> Void {
let fileURL = "https://api.yelp.com/v3/businesses/search?term=Restaurants"
let parameters : Parameters = ["radius": "10000", "latitude": "29.94", "longitude": "-85.41"]
let headers: [String : String] = ["Authorization": "Bearer <YOUR YELP APP_ID GOES HERE>"]
Alamofire.request(fileURL, method: .get, parameters: parameters, headers: headers).responseJSON {
response in
if let receivedString = response.result.value {
print()
print("Here \(receivedString)")
}
}
Note: This entry does not include the <> and has a simple space between Bearer and APP_ID.
How to Handle errors in URL in it?
Suppose by chance user entered character like "/" then it crashes the program
nice