httpbody json swift post

httpbody - post json swift 4



Cómo hacer una solicitud HTTP Post con cuerpo JSON en Swift (11)

Estoy tratando de hacer una solicitud de publicación HTTP con un cuerpo JSON:

Cómo poder agregar un NSdictionnary al cuerpo de la solicitud HTTP.

Aquí está mi código, no parece funcionar correctamente.

var entry1 = Response(IdQuestion: 6510,IdProposition: 10,Time: 30) var entry2 = Response(IdQuestion: 8284,IdProposition: 10,Time: 30) Responses.append(entry1) Responses.append(entry2) let list = Responses.map { $0.asDictionary } let json = ["List":list,"IdSurvey":"102","IdUser":"iOSclient","UserInformation":"iOSClient"] let data : NSData = NSKeyedArchiver.archivedDataWithRootObject(json) NSJSONSerialization.isValidJSONObject(json) let myURL = NSURL(string: "http://www.myserver.com")! let request = NSMutableURLRequest(URL: myURL) request.HTTPMethod = "POST" request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("application/json", forHTTPHeaderField: "Accept") request.HTTPBody = data let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in println(response) // Your completion handler code here } task.resume()


// preparar datos json let mapDict = ["1": "Primero", "2": "Segundo"]

let json = [ "title":"ABC" , "dict": mapDict ] as [String : Any] let jsonData : NSData = NSKeyedArchiver.archivedData(withRootObject: json) as NSData // create post request let url = NSURL(string: "http://httpbin.org/post")! let request = NSMutableURLRequest(url: url as URL) request.httpMethod = "POST" // insert json data to the request request.httpBody = jsonData as Data let task = URLSession.shared.dataTask(with: request as URLRequest){ data,response,error in if error != nil{ return } do { let result = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] print("Result",result!) } catch { print("Error -> /(error)") } } task.resume()


El siguiente código de Swift 5 Playground muestra una posible forma de resolver su problema utilizando JSONSerialization y URLSession :

let url = URL(string: "url")! var request = URLRequest(url: url) request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("application/json", forHTTPHeaderField: "Accept") request.httpMethod = "POST" let postString = "ChangeAccordingtoyourdata=/(paramOne)&ChangeAccordingtoyourdata2=/(paramTwo)" request.httpBody = postString.data(using: .utf8) let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error print("error=/(error)") return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is /(httpStatus.statusCode)") print("response = /(response)") SVProgressHUD.showError(withStatus: "Request has not submitted successfully./nPlease try after some time") } let responseString = String(data: data, encoding: .utf8) print("responseString = /(responseString)") SVProgressHUD.showSuccess(withStatus: "Request has submitted successfully./nPlease wait for a while") DispatchQueue.main.async { // enter code } } task.resume()


Prueba esto,

// prepare json data let json: [String: Any] = ["title": "ABC", "dict": ["1":"First", "2":"Second"]] let jsonData = try? JSONSerialization.data(withJSONObject: json) // create post request let url = URL(string: "http://httpbin.org/post")! var request = URLRequest(url: url) request.httpMethod = "POST" // insert json data to the request request.httpBody = jsonData let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { print(error?.localizedDescription ?? "No data") return } let responseJSON = try? JSONSerialization.jsonObject(with: data, options: []) if let responseJSON = responseJSON as? [String: Any] { print(responseJSON) } } task.resume()

o prueba una manera conveniente Alamofire


func fucntion () {

var parameters = [String:String]() let apiToken = "Bearer /(ApiUtillity.sharedInstance.getUserData(key: "vAuthToken"))" let headers = ["Vauthtoken":apiToken] parameters = ["firstname":name,"lastname":last_name,"mobile":mobile_number,"email":emails_Address] Alamofire.request(ApiUtillity.sharedInstance.API(Join: "user/edit_profile"), method: .post, parameters: parameters, encoding: URLEncoding.default,headers:headers).responseJSON { response in debugPrint(response) if let json = response.result.value { let dict:NSDictionary = (json as? NSDictionary)! print(dict) // print(response) let StatusCode = dict.value(forKey: "status") as! Int if StatusCode==200 { ApiUtillity.sharedInstance.dismissSVProgressHUDWithSuccess(success: "Success") let UserData = dict.value(forKey: "data") as! NSDictionary print(UserData) } else if StatusCode==401 { let ErrorDic:NSDictionary = dict.value(forKey: "message") as! NSDictionary let ErrorMessage = ErrorDic.value(forKey: "error") as! String } else { let ErrorDic:NSDictionary = dict.value(forKey: "message") as! NSDictionary let ErrorMessage = ErrorDic.value(forKey: "error") as! String } } else { ApiUtillity.sharedInstance.dismissSVProgressHUDWithError(error: "Something went wrong") } }


puedes hacer algo como esto:

func HTTPPostJSON(url: String, data: NSData, callback: (String, String?) -> Void) { var request = NSMutableURLRequest(URL: NSURL(string: url)!) request.HTTPMethod = "POST" request.addValue("application/json",forHTTPHeaderField: "Content-Type") request.addValue("application/json",forHTTPHeaderField: "Accept") request.HTTPBody = data HTTPsendRequest(request, callback: callback) } func HTTPsendRequest(request: NSMutableURLRequest, callback: (String, String?) -> Void) { let task = NSURLSession.sharedSession() .dataTaskWithRequest(request) { (data, response, error) -> Void in if (error != nil) { callback("", error.localizedDescription) } else { callback(NSString(data: data, encoding: NSUTF8StringEncoding)! as String, nil) } } task.resume() } //use var data :Dictionary<String, AnyObject> = yourDictionaryData<-- var requestNSData:NSData = NSJSONSerialization.dataWithJSONObject(request, options:NSJSONWritingOptions(0), error: &err)! HTTPPostJSON("http://yourPosturl..", data: requestNSData) { (response, error) -> Void in if error != nil{ //error return; } println(response); }


Publicación HTTP en Swift capturando los errores

let json = [ Activity.KEY_IDSUBJECT : activity.idSubject, Activity.KEY_RECORDMODE : "3", Activity.KEY_LOCATION_LONGITUDE : "0",Activity.KEY_LOCATION_LATITUDE : "0", Activity.KEY_CHECKIN : String(activity.dateCheckIn), Activity.KEY_CHECKOUT : String(activity.dateCheckOut) ] do { let jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: .PrettyPrinted) // create post request let url = NSURL(string: "https://...appspot.com/_ah/api/activityendpoint/v1/activity")! let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" // insert json data to the request request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") request.HTTPBody = jsonData let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in if error != nil{ print("Error -> /(error)") return } do { let result = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject] print("Result -> /(result)") } catch { print("Error -> /(error)") } } task.resume() return task } catch { print(error) }


Swift 3 y 4

HTTP POST request utilizando la URLSession API en Swift 4

func postRequest(username: String, password: String, completion: @escaping ([String: Any]?, Error?) -> Void) { //declare parameter as a dictionary which contains string as key and value combination. let parameters = ["name": username, "password": password] //create the url with NSURL let url = URL(string: "https://www.myserver.com/api/login")! //create the session object let session = URLSession.shared //now create the Request object using the url object var request = URLRequest(url: url) request.httpMethod = "POST" //set http method as POST do { request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to data object and set it as request body } catch let error { print(error.localizedDescription) completion(nil, error) } //HTTP Headers request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") //create dataTask using the session object to send data to the server let task = session.dataTask(with: request, completionHandler: { data, response, error in guard error == nil else { completion(nil, error) return } guard let data = data else { completion(nil, NSError(domain: "dataNilError", code: -100001, userInfo: nil)) return } do { //create json object from data guard let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] else { completion(nil, NSError(domain: "invalidJSONTypeError", code: -100009, userInfo: nil)) return } print(json) completion(json, nil) } catch let error { print(error.localizedDescription) completion(nil, error) } }) task.resume() } @objc func submitAction(_ sender: UIButton) { //call postRequest with username and password parameters postRequest(username: "username", password: "password") { (result, error) in if let result = result { print("success: /(result)") } else if let error = error { print("error: /(error.localizedDescription)") } }

Usando Alamofire:

let parameters = ["name": "username", "password": "password123"] Alamofire.request("https://www.myserver.com/api/login", method: .post, parameters: parameters, encoding: URLEncoding.httpBody)


Swift4 - Solución Apple "POST" y "Codificable"

Carga de datos a un sitio web mediante request.httpmethod = "Publicar" y cosas codificables :

@see: Listado 2 Configuración de una solicitud de URL

let userlogin = User(username: username, password: password, deviceid:UIDevice.current.identifierForVendor!.uuidString) guard let uploadData = try? JSONEncoder().encode(userlogin) else { print("Error UploadData: ") return } let urlUser = URL(string: APPURL.apiURL)! var request = URLRequest(url: urlUser) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") var responseStatus = 0 let task = URLSession.shared.uploadTask(with: request, from: uploadData) { data, response, error in if let error = error { let code = (error as NSError).code print("Error:/(code) : /(error.localizedDescription)") completion(code) return } guard let response = response as? HTTPURLResponse else { print("Invalid response") return } // do your response handling here ...


import UIKit import PlaygroundSupport PlaygroundPage.current.needsIndefiniteExecution = true let url = URL(string: "http://localhost:8080/new")! let jsonDict = ["firstName": "Jane", "lastName": "Doe"] let jsonData = try! JSONSerialization.data(withJSONObject: jsonDict, options: []) var request = URLRequest(url: url) request.httpMethod = "post" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = jsonData let task = URLSession.shared.dataTask(with: request) { (data, response, error) in if let error = error { print("error:", error) return } do { guard let data = data else { return } guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { return } print("json:", json) } catch { print("error:", error) } } task.resume()


var request = URLRequest(url: URL(string: "http://yogpande.apphb.com/api/my/posttblhouse")!) request.httpMethod = "POST" let postString = "[email protected]&password=1234567" request.httpBody = postString.data(using: .utf8) let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { print("error=(error)") return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { print("statusCode should be 200, but is /(httpStatus.statusCode)") print("response = /(response)") } let responseString = String(data: data, encoding: .utf8) print("responseString = /(responseString)") } task.resume() }


var request = URLRequest(url: URL(string: "your URL")!) 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") let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { print("error=/(String(describing: error))") return } do { let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! NSDictionary print(dictionary) let status = dictionary.value(forKey: "status") as! String let sts = Int(status) DispatchQueue.main.async() { if sts == 200 { print(dictionary) } else { self.alertMessageOk(title: self.Alert!, message: dictionary.value(forKey: "message") as! String) } } } catch { print(error) } } task.resume()