How to send POST request with BODY in fast

I am trying to request a message with the body in quick use of Alamofire.

my json body looks like this:

{ "IdQuiz" : 102, "IdUser" : "iosclient", "User" : "iosclient", "List":[ { "IdQuestion" : 5, "IdProposition": 2, "Time" : 32 }, { "IdQuestion" : 4, "IdProposition": 3, "Time" : 9 } ] } 

I am trying to make let list using NSDictionnary, which looks like this:

 [[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]] 

and my query using Alamofire looks like this:

 Alamofire.request(.POST, "http://myserver.com", parameters: ["IdQuiz":"102","IdUser":"iOSclient","User":"iOSClient","List":list ], encoding: .JSON) .response { request, response, data, error in let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding) println(dataString) } 

There is an error in the request, and I believe that the problem is with the Dictionary list, because if I make a request without a list, it works fine, so any idea?




I tried to offer a solution, but I ran into the same problem:

  let json = ["List":list,"IdQuiz":"102","IdUser":"iOSclient","UserInformation":"iOSClient"] let data = NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted,error:nil) let jsons = NSString(data: data!, encoding: NSUTF8StringEncoding) Alamofire.request(.POST, "http://myserver.com", parameters: [:], encoding: .Custom({ (convertible, params) in var mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest mutableRequest.HTTPBody = jsons!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) return (mutableRequest, nil) })) .response { request, response, data, error in let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding) println(dataString) } 
+80
json put swift alamofire
Aug 13 '15 at 7:52
source share
13 answers

You're close Formatting the parameter dictionary does not look correct. You should try the following:

 let parameters: [String: AnyObject] = [ "IdQuiz" : 102, "IdUser" : "iosclient", "User" : "iosclient", "List": [ [ "IdQuestion" : 5, "IdProposition": 2, "Time" : 32 ], [ "IdQuestion" : 4, "IdProposition": 3, "Time" : 9 ] ] ] Alamofire.request(.POST, "http://myserver.com", parameters: parameters, encoding: .JSON) .responseJSON { request, response, JSON, error in print(response) print(JSON) print(error) } 

Hope this fixes your issue. If it is not, answer and I will adjust my answer accordingly.

+88
Aug 14 '15 at 15:35
source share

If you are using Alamofire v4. 0+, then the accepted answer will look like this:

 let parameters: [String: Any] = [ "IdQuiz" : 102, "IdUser" : "iosclient", "User" : "iosclient", "List": [ [ "IdQuestion" : 5, "IdProposition": 2, "Time" : 32 ], [ "IdQuestion" : 4, "IdProposition": 3, "Time" : 9 ] ] ] Alamofire.request("http://myserver.com", method: .post, parameters: parameters, encoding: JSONEncoding.default) .responseJSON { response in print(response) } 
+155
Oct 24 '16 at 13:12
source share

I don’t like any other answer (except maybe one from SwiftDeveloper), because they either require you to deserialize your JSON, only for it to be serialized again or take care of the structure of JSON itself.

The correct answer was posted by afrodev in another question. You have to go and strengthen it.

Below is just my adaptation with some minor changes (primarily the explicit UTF-8 encoding).

 let urlString = "https://example.org/some/api" let json = "{\"What\":\"Ever\"}" let url = URL(string: urlString)! let jsonData = json.data(using: .utf8, allowLossyConversion: false)! var request = URLRequest(url: url) request.httpMethod = HTTPMethod.post.rawValue request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type") request.httpBody = jsonData Alamofire.request(request).responseJSON { (response) in print(response) } 
+30
Feb 23 '17 at 9:02
source share

Xcode 8.X, Swift 3.X

Simple use;

  let params:NSMutableDictionary? = [ "IdQuiz" : 102, "IdUser" : "iosclient", "User" : "iosclient", "List": [ [ "IdQuestion" : 5, "IdProposition": 2, "Time" : 32 ], [ "IdQuestion" : 4, "IdProposition": 3, "Time" : 9 ] ] ]; let ulr = NSURL(string:"http://myserver.com" as String) let request = NSMutableURLRequest(url: ulr! as URL) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let data = try! JSONSerialization.data(withJSONObject: params!, options: JSONSerialization.WritingOptions.prettyPrinted) let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue) if let json = json { print(json) } request.httpBody = json!.data(using: String.Encoding.utf8.rawValue); Alamofire.request(request as! URLRequestConvertible) .responseJSON { response in // do whatever you want here print(response.request) print(response.response) print(response.data) print(response.result) } 
+7
Dec 15 '16 at 13:38
source share

I edited SwiftDeveloper a bit because it didn't work for me. I also added Alamofire validation.

 let body: NSMutableDictionary? = [ "name": "\(nameLabel.text!)", "phone": "\(phoneLabel.text!))"] let url = NSURL(string: "http://server.com" as String) var request = URLRequest(url: url! as URL) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let data = try! JSONSerialization.data(withJSONObject: body!, options: JSONSerialization.WritingOptions.prettyPrinted) let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue) if let json = json { print(json) } request.httpBody = json!.data(using: String.Encoding.utf8.rawValue) let alamoRequest = Alamofire.request(request as URLRequestConvertible) alamoRequest.validate(statusCode: 200..<300) alamoRequest.responseString { response in switch response.result { case .success: ... case .failure(let error): ... } } 
+3
Aug 24 '17 at 2:55 on
source share

There are a few changes that I would like to notify. From now on, you can access the request, JSON, error from the response object.

  let urlstring = "Add URL String here" let parameters: [String: AnyObject] = [ "IdQuiz" : 102, "IdUser" : "iosclient", "User" : "iosclient", "List": [ [ "IdQuestion" : 5, "IdProposition": 2, "Time" : 32 ], [ "IdQuestion" : 4, "IdProposition": 3, "Time" : 9 ] ] ] Alamofire.request(.POST, urlstring, parameters: parameters, encoding: .JSON).responseJSON { response in print(response.request) // original URL request print(response.response) // URL response print(response.data) // server data print(response.result) // result of response serialization if let JSON = response.result.value { print("JSON: \(JSON)") } response.result.error } 
+2
Jul 18 '16 at 6:04
source share

If you use swift4 and Alamofire v4.0 then the accepted code will look like this:

  let parameters: Parameters = [ "username" : email.text!, "password" : password.text! ] let urlString = "https://api.harridev.com/api/v1/login" let url = URL.init(string: urlString) Alamofire.request(url!, method: .put, parameters: , encoding: JSONEncoding.default, headers: nil).responseJSON { response in switch response.result { case .success(let json): let jsonData = json as! Any print(jsonData) case .failure(let error): self.errorFailer(error: error) } } 
+2
Jun 13 '18 at 10:20
source share

This is how I created a Http POST request with a fast one that requires Json encoded parameters and headers.

The created BKCAPIClient API client as a generic instance that will include all types of requests, such as POST, GET, PUT, DELETE, etc.

 func postRequest(url:String, params:Parameters?, headers:HTTPHeaders?, completion:@escaping (_ responseData:Result<Any>?, _ error:Error?)->Void){ Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers).responseJSON { response in guard response.result.isSuccess, (response.result.value != nil) else { debugPrint("Error while fetching data: \(String(describing: response.result.error))") completion(nil,response.result.error) return } completion(response.result,nil) } } 

The created class of operations, which contains all the data necessary for a particular request, and also contains the parsing logic inside the completion block.

 func requestAccountOperation(completion: @escaping ( (_ result:Any?, _ error:Error?) -> Void)){ BKCApiClient.shared.postRequest(url: BKCConstants().bkcUrl, params: self.parametrs(), headers: self.headers()) { (result, error) in if(error != nil){ //Parse and save to DB/Singletons. } completion(result, error) } } func parametrs()->Parameters{ return ["userid":"xnmtyrdx","bcode":"HDF"] as Parameters } func headers()->HTTPHeaders{ return ["Authorization": "Basic bXl1c2VyOm15cGFzcw", "Content-Type": "application/json"] as HTTPHeaders } 

Call APIs In any view controller where we need this data

 func callToAPIOperation(){ let accOperation: AccountRequestOperation = AccountRequestOperation() accOperation.requestAccountOperation{(result, error) in }} 
+1
Jun 15 '18 at 2:28
source share

Alamofire Retrieves Data with POST, Parameter and Headers

 func feedbackApi(){ DispatchQueue.main.async { let headers = [ "Content-Type": "application/x-www-form-urlencoded", "Authorization": "------" ] let url = URL(string: "---------") var parameters = [String:AnyObject]() parameters = [ "device_id":"-----" as AnyObject, "user_id":"----" as AnyObject, "cinema_id":"-----" as AnyObject, "session_id":"-----" as AnyObject, ] Alamofire.request(url!, method: .post, parameters: parameters,headers:headers).responseJSON { response in switch response.result{ case.success(let data): self.myResponse = JSON(data) print(self.myResponse as Any) let slide = self.myResponse!["sliders"] print(slide) print(slide.count) for i in 0..<slide.count{ let single = Sliders(sliderJson: slide[i]) self.slidersArray.append(single) } DispatchQueue.main.async { self.getSliderCollection.reloadData() } case .failure(let error): print("dddd",error) } } } } 
+1
Sep 04 '19 at 8:41
source share
 func get_Contact_list() { ApiUtillity.sharedInstance.showSVProgressHUD(text: "Loading..") let cont_nunber = contact_array as NSArray print(cont_nunber) let token = UserDefaults.standard.string(forKey: "vAuthToken")! let apiToken = "Bearer \(token)" let headers = [ "Vauthtoken": apiToken, "content-type": "application/json" ] let myArray: [Any] = cont_nunber as! [Any] let jsonData: Data? = try? JSONSerialization.data(withJSONObject: myArray, options: .prettyPrinted) // var jsonString: String = nil var jsonString = String() if let aData = jsonData { jsonString = String(data: aData, encoding: .utf8)! } let url1 = "URL" var request = URLRequest(url: URL(string: url1)!) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = jsonData as! Data // let session = URLSession.shared let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { print("error=\(String(describing: error))") ApiUtillity.sharedInstance.dismissSVProgressHUD() return } print("response = \(String(describing: response))") let responseString = String(data: data, encoding: .utf8) print("responseString = \(String(describing: responseString))") let json = self.convertStringToDictionary(text: responseString!)! as NSDictionary print(json) let status = json.value(forKey: "status") as! Int if status == 200 { let array = (json.value(forKey: "data") as! NSArray).mutableCopy() as! NSMutableArray } else if status == 401 { ApiUtillity.sharedInstance.dismissSVProgressHUD() } else { ApiUtillity.sharedInstance.dismissSVProgressHUD() } } task.resume() } func convertStringToDictionary(text: String) -> [String:AnyObject]? { if let data = text.data(using: String.Encoding.utf8) { do { let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:AnyObject] return json } catch { print("Something went wrong") } } return nil } 
0
Jan 10 '19 at 5:10
source share

If anyone is interested in what to do with models and more, see below

  var itemArr: [Dictionary<String, String>] = [] for model in models { let object = ["param1": model.param1, "param2": model.param2] itemArr.append(object as! [String : String]) } let param = ["field1": someValue, "field2": someValue, "field3": itemArr] as [String : Any] let url: URLConvertible = "http://------" Alamofire.request(url, method: .post, parameters: param, encoding: JSONEncoding.default) .responseJSON { response in self.isLoading = false switch response.result { case .success: break case .failure: break } } 
0
Aug 29 '19 at 10:56 on
source share
 { "draft_order": { "line_items": [ { "variant_id": 22629502812245, "quantity": 2 } ] } } 

How to pass this body as an NSDictionary parameter using Alamofire? Please help. Thank you in advance.

-one
Jun 24 '19 at 13:03
source share

{

  if Reachability.isConnectedToNetwork() == true { let hud = MBProgressHUD.showAdded(to: self.view, animated: true) hud.mode = .indeterminate hud.label.text = "Loading" hud.animationType = .fade var request = URLRequest(url: URL(string: "http://skandal24.serv.si/ws/webservice/forgot_password")!) request.httpMethod = "POST" let postString = String(format: "email=%@&lang=%@", arguments: [txt_emailVirify.text!, language!]) print(postString) emailString = txt_emailVirify.text! request.httpBody = postString.data(using: .utf8) request.addValue("delta141forceSEAL8PARA9MARCOSBRAHMOS", forHTTPHeaderField: "Authorization") request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") Alamofire.request(request).responseJSON { response in //Your code print(response.value) if response.response?.statusCode == 200 { let dictionary = (response.value) as! AnyObject let status = dictionary.value(forKey: "status") as! String let sts = Int(status) DispatchQueue.main.async() { if sts == 200 { } } } else { } } } else { } } 
-four
Sep 27 '17 at 6:50
source share



All Articles