Alamofir Accept and Content-Type JSON

I am trying to make a GET request with Alamofire in Swift. I need to set the following headers:

Content-Type: application/json Accept: application/json 

I could hack it and do it directly by specifying the headers for the request, but I want to do it with ParameterEncoding , as suggested in the library. So far I have this:

 Alamofire.request(.GET, url, encoding: .JSON) .validate() .responseJSON { (req, res, json, error) in if (error != nil) { NSLog("Error: \(error)") println(req) println(res) } else { NSLog("Success: \(url)") var json = JSON(json!) } } 

Content-Type installed, but not Accept . How can I do it right?

+6
source share
4 answers

I ended up using URLRequestConvertible https://github.com/Alamofire/Alamofire#urlrequestconvertible

 enum Router: URLRequestConvertible { static let baseUrlString = "someUrl" case Get(url: String) var URLRequest: NSMutableURLRequest { let path: String = { switch self { case .Get(let url): return "/\(url)" } }() let URL = NSURL(string: Router.baseUrlString)! let URLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path)) // set header fields URLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") URLRequest.setValue("application/json", forHTTPHeaderField: "Accept") return URLRequest.0 } } 

And then just:

 Alamofire.request(Router.Get(url: "")) .validate() .responseJSON { (req, res, json, error) in if (error != nil) { NSLog("Error: \(error)") println(req) println(res) } else { NSLog("Success") var json = JSON(json!) NSLog("\(json)") } } 

Another way to do this is to specify it for the entire session, check out @David's comment above:

 Alamofire.Manager.sharedInstance.session.configuration .HTTPAdditionalHeaders?.updateValue("application/json", forKey: "Accept") 
+10
source

Example directly from the Alamofire github page:

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .validate(statusCode: 200..<300) .validate(contentType: ["application/json"]) .response { (_, _, _, error) in println(error) } 

In your case, add what you want:

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .validate(statusCode: 200..<300) .validate(contentType: ["application/json"]) .validate(Accept: ["application/json"]) .response { (_, _, _, error) in println(error) } 
+1
source

Try the following:

 URLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") URLRequest.setValue("application/json", forHTTPHeaderField: "Accept") 
+1
source

Easy way to use get method with request form and json response type

 var parameters: [String:Any] = [ "id": "3" ] var headers: HTTPHeaders = [ "Content-Type":"application/json", "Accept": "application/json" ] Alamofire.request(url, method: .get, parameters: parameters, encoding: URLEncoding.queryString,headers:headers) .validate(statusCode: 200..<300) .responseData { response in switch response.result { case .success(let value): case .failure(let error): } 
0
source

Source: https://habr.com/ru/post/982111/


All Articles