¿Cómo hacer una solicitud HTTP en Swift?

Leí The Programming Language Swift de Apple en iBooks, pero no puedo entender cómo hacer una solicitud http (algo así como CURL) en Swift. ¿Debo importar clases Obj-C o solo necesito importar bibliotecas predeterminadas? ¿O no es posible realizar una solicitud HTTP basada en el código rápido nativo?

Otra opción es la librería Alamofire que ofrece métodos de solicitud / respuesta encadenable.

https://github.com/Alamofire/Alamofire

Hacer una solicitud

import Alamofire Alamofire.request(.GET, "http://httpbin.org/get") 

Manejo de respuesta

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .response { request, response, data, error in print(request) print(response) print(error) } 

Puede usar URL , URLRequest y URLSession o NSURLConnection como lo haría normalmente en Objective-C. Tenga en cuenta que para iOS 7.0 y posterior, se prefiere URLSession .

Usando URLSession

Inicialice un objeto de URL y una URLSessionDataTask de URLSession . Luego ejecuta la tarea con resume() .

 let url = URL(string: "http://www.stackoverflow.com")! let task = URLSession.shared.dataTask(with: url) {(data, response, error) in guard let data = data else { return } print(String(data: data, encoding: .utf8)!) } task.resume() 

Usando NSURLConnection

Primero, inicialice una URL y una URLRequest :

 let url = URL(string: "http://www.stackoverflow.com")! var request = URLRequest(url: url) request.httpMethod = "POST" 

Luego, puede cargar la solicitud de forma asíncrona con:

 NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main) {(response, data, error) in guard let data = data else { return } print(String(data: data, encoding: .utf8)!) } 

O puede inicializar un NSURLConnection :

 let connection = NSURLConnection(request: request, delegate:nil, startImmediately: true) 

Simplemente asegúrese de configurar su delegado en algo distinto de nil y use los métodos de delegado para trabajar con la respuesta y los datos recibidos.

Para obtener más detalles, consulte la documentación del protocolo NSURLConnectionDataDelegate

Prueba en un patio de Xcode

Si desea probar este código en un área de juegos de Xcode, agregue import XCPlayground a su área de juegos, al igual que la siguiente llamada:

 PlaygroundPage.current.needsIndefiniteExecution = true 

Esto le permitirá usar un código asíncrono en áreas de juego.

Verifique los códigos a continuación:

1. SynchonousRequest

Swift 1.2

  let urlPath: String = "YOUR_URL_HERE" var url: NSURL = NSURL(string: urlPath)! var request1: NSURLRequest = NSURLRequest(URL: url) var response: AutoreleasingUnsafeMutablePointer=nil var dataVal: NSData = NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)! var err: NSError println(response) var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableContainers, error: &err) as? NSDictionary println("Synchronous\(jsonResult)") 

Swift 2.0 +

 let urlPath: String = "YOUR_URL_HERE" let url: NSURL = NSURL(string: urlPath)! let request1: NSURLRequest = NSURLRequest(URL: url) let response: AutoreleasingUnsafeMutablePointer=nil do{ let dataVal = try NSURLConnection.sendSynchronousRequest(request1, returningResponse: response) print(response) do { if let jsonResult = try NSJSONSerialization.JSONObjectWithData(dataVal, options: []) as? NSDictionary { print("Synchronous\(jsonResult)") } } catch let error as NSError { print(error.localizedDescription) } }catch let error as NSError { print(error.localizedDescription) } 

2. AsynchonousRequest

Swift 1.2

 let urlPath: String = "YOUR_URL_HERE" var url: NSURL = NSURL(string: urlPath)! var request1: NSURLRequest = NSURLRequest(URL: url) let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in var err: NSError var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary println("Asynchronous\(jsonResult)") }) 

Swift 2.0 +

 let urlPath: String = "YOUR_URL_HERE" let url: NSURL = NSURL(string: urlPath)! let request1: NSURLRequest = NSURLRequest(URL: url) let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in do { if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { print("ASynchronous\(jsonResult)") } } catch let error as NSError { print(error.localizedDescription) } }) 

3. Como conexión de URL habitual

Swift 1.2

  var dataVal = NSMutableData() let urlPath: String = "YOUR URL HERE" var url: NSURL = NSURL(string: urlPath)! var request: NSURLRequest = NSURLRequest(URL: url) var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)! connection.start() 

Entonces

  func connection(connection: NSURLConnection!, didReceiveData data: NSData!){ self.dataVal?.appendData(data) } func connectionDidFinishLoading(connection: NSURLConnection!) { var error: NSErrorPointer=nil var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataVal!, options: NSJSONReadingOptions.MutableContainers, error: error) as NSDictionary println(jsonResult) } 

Swift 2.0 +

  var dataVal = NSMutableData() let urlPath: String = "YOUR URL HERE" var url: NSURL = NSURL(string: urlPath)! var request: NSURLRequest = NSURLRequest(URL: url) var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)! connection.start() 

Entonces

 func connection(connection: NSURLConnection!, didReceiveData data: NSData!){ dataVal.appendData(data) } func connectionDidFinishLoading(connection: NSURLConnection!) { do { if let jsonResult = try NSJSONSerialization.JSONObjectWithData(dataVal, options: []) as? NSDictionary { print(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } 

4. Solicitud POST asincrónica

Swift 1.2

  let urlPath: String = "YOUR URL HERE" var url: NSURL = NSURL(string: urlPath)! var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) request1.HTTPMethod = "POST" var stringPost="deviceToken=123456" // Key and Value let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding) request1.timeoutInterval = 60 request1.HTTPBody=data request1.HTTPShouldHandleCookies=false let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in var err: NSError var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary println("AsSynchronous\(jsonResult)") }) 

Swift 2.0 +

 let urlPath: String = "YOUR URL HERE" let url: NSURL = NSURL(string: urlPath)! let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) request1.HTTPMethod = "POST" let stringPost="deviceToken=123456" // Key and Value let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding) request1.timeoutInterval = 60 request1.HTTPBody=data request1.HTTPShouldHandleCookies=false let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in do { if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { print("ASynchronous\(jsonResult)") } } catch let error as NSError { print(error.localizedDescription) } }) 

5. Petición GET asincrónica

Swift 1.2

  let urlPath: String = "YOUR URL HERE" var url: NSURL = NSURL(string: urlPath)! var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) request1.HTTPMethod = "GET" request1.timeoutInterval = 60 let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in var err: NSError var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary println("AsSynchronous\(jsonResult)") }) 

Swift 2.0 +

 let urlPath: String = "YOUR URL HERE" let url: NSURL = NSURL(string: urlPath)! let request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) request1.HTTPMethod = "GET" let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in do { if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { print("ASynchronous\(jsonResult)") } } catch let error as NSError { print(error.localizedDescription) } }) 

6. Subida de imagen (archivo)

Swift 2.0 +

  let mainURL = "YOUR_URL_HERE" let url = NSURL(string: mainURL) let request = NSMutableURLRequest(URL: url!) let boundary = "78876565564454554547676" request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") request.HTTPMethod = "POST" // POST OR PUT What you want let session = NSURLSession(configuration:NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: nil) let imageData = UIImageJPEGRepresentation(UIImage(named: "Test.jpeg")!, 1) var body = NSMutableData() body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) // Append your parameters body.appendData("Content-Disposition: form-data; name=\"name\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("PREMKUMAR\r\n".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!) body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("Content-Disposition: form-data; name=\"description\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("IOS_DEVELOPER\r\n".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!) body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) // Append your Image/File Data var imageNameval = "HELLO.jpg" body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("Content-Disposition: form-data; name=\"profile_photo\"; filename=\"\(imageNameval)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("Content-Type: image/jpeg\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData(imageData!) body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) request.HTTPBody = body let dataTask = session.dataTaskWithRequest(request) { (data, response, error) -> Void in if error != nil { //handle error } else { let outputString : NSString = NSString(data:data!, encoding:NSUTF8StringEncoding)! print("Response:\(outputString)") } } dataTask.resume() 

Solución básica Swift 3

 let url = URL(string: "http://www.stackoverflow.com") let task = URLSession.shared.dataTask(with: url! as URL) { data, response, error in guard let data = data, error == nil else { return } print(NSString(data: data, encoding: String.Encoding.utf8.rawValue)) } task.resume() 

Solicitud de datos de Swift 3 utilizando API de URLSession

  //create the url with NSURL let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1")! //change the url //create the session object let session = URLSession.shared //now create the URLRequest object using the url object let request = URLRequest(url: url) //create dataTask using the session object to send data to the server let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in guard error == nil else { return } guard let data = data else { return } do { //create json object from data if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] { print(json) } } catch let error { print(error.localizedDescription) } }) task.resume() 

Estoy usando el contenedor de este tipo con buenos resultados hasta el momento https://github.com/daltoniam/swiftHTTP . No hay grandes abstracciones con fugas hasta el momento

Ejemplo

  do { let opt = try HTTP.GET("https://google.com") opt.start { response in if let err = response.error { print("error: \(err.localizedDescription)") return //also notify app of failure as needed } print("opt finished: \(response.description)") //print("data is: \(response.data)") access the response of the data with response.data } } catch let error { print("got an error creating the request: \(error)") } 

He hecho HTTP Request Ambos métodos GET y POST con JSON Parsing de esta manera:

en viewDidLoad () :

 override func viewDidLoad() { super.viewDidLoad() makeGetRequest() makePostRequest() } func makePostRequest(){ let urlPath: String = "http://www.swiftdeveloperblog.com/http-post-example-script/" var url: NSURL = NSURL(string: urlPath)! var request: NSMutableURLRequest = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" var stringPost="firstName=James&lastName=Bond" // Key and Value let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding) request.timeoutInterval = 60 request.HTTPBody=data request.HTTPShouldHandleCookies=false let queue:NSOperationQueue = NSOperationQueue() NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in var error: AutoreleasingUnsafeMutablePointer = nil let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary if (jsonResult != nil) { // Success println(jsonResult) let message = jsonResult["Message"] as! NSString println(message) }else { // Failed println("Failed") } }) } func makeGetRequest(){ var url : String = "http://api.androidhive.info/contacts/" var request : NSMutableURLRequest = NSMutableURLRequest() request.URL = NSURL(string: url) request.HTTPMethod = "GET" request.timeoutInterval = 60 NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in var error: AutoreleasingUnsafeMutablePointer = nil let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary if (jsonResult != nil) { // Success println(jsonResult) let dataArray = jsonResult["contacts"] as! NSArray; for item in dataArray { // loop through data items let obj = item as! NSDictionary for (key, value) in obj { println("Key: \(key) - Value: \(value)") let phone = obj["phone"] as! NSDictionary; let mobile = phone["mobile"] as! NSString println(mobile) let home = phone["home"] as! NSString println(home) let office = phone["office"] as! NSString println(office) } } } else { // Failed println("Failed") } }) } 

Hecho

Detalles

Xcode 9.2, Swift 4

Solución

 import Foundation class Data { static fileprivate let queue = DispatchQueue(label: "requests.queue", qos: .utility) static fileprivate let mainQueue = DispatchQueue.main fileprivate class func make(session: URLSession = URLSession.shared, request: URLRequest, closure: @escaping (_ json: [String: Any]?, _ error: Error?)->()) { let task = session.dataTask(with: request) { data, response, error in queue.async { guard error == nil else { return } guard let data = data else { return } do { if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] { mainQueue.async { closure(json, nil) } } } catch let error { print(error.localizedDescription) mainQueue.async { closure(nil, error) } } } } task.resume() } class func searchRequest(term: String, closure: @escaping (_ json: [String: Any]?, _ error: Error?)->()) { let url = URL(string: "https://itunes.apple.com/search?term=\(term.replacingOccurrences(of: " ", with: "+"))") let request = URLRequest(url: url!) Data.make(request: request) { json, error in closure(json, error) } } } 

Uso

 Data.searchRequest(term: "jack johnson") { json, error in print(error ?? "nil") print(json ?? "nil") print("Update views") } 

Resultados

enter image description here

Puede usar Just , una biblioteca HTTP de estilo python-requests .

Algunos ejemplos de enviar una solicitud HTTP con Just:

 // synchronous GET request with URL query a=1 let r = Just.get("https://httpbin.org/get", params:["a":1]) // asynchronous POST request with form value and file uploads Just.post( "http://justiceleauge.org/member/register", data: ["username": "barryallen", "password":"ReverseF1ashSucks"], files: ["profile_photo": .URL(fileURLWithPath:"flash.jpeg", nil)] ) { (r) if (r.ok) { /* success! */ } } 

En ambos casos, se puede acceder al resultado de una solicitud r de forma similar a python-request :

 r.ok // is the response successful? r.statusCode // status code of response r.content // response body as NSData? r.text // response body as text? r.json // response body parsed by NSJSONSerielization 

Puedes encontrar más ejemplos en este patio de recreo

Usar esta biblioteca en modo síncrono en un patio de recreo es lo más cercano a cURL que se puede obtener en Swift.

Llamaré a json al hacer clic en el botón de inicio de sesión

 @IBAction func loginClicked(sender : AnyObject) { var request = NSMutableURLRequest(URL: NSURL(string: kLoginURL)) // Here, kLogin contains the Login API. var session = NSURLSession.sharedSession() request.HTTPMethod = "POST" var err: NSError? request.HTTPBody = NSJSONSerialization.dataWithJSONObject(self.criteriaDic(), options: nil, error: &err) // This Line fills the web service with required parameters. request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in var strData = NSString(data: data, encoding: NSUTF8StringEncoding) var err1: NSError? var json2 = NSJSONSerialization.JSONObjectWithData(strData.dataUsingEncoding(NSUTF8StringEncoding), options: .MutableLeaves, error:&err1 ) as NSDictionary println("json2 :\(json2)") if(err) { println(err!.localizedDescription) } else { var success = json2["success"] as? Int println("Success: \(success)") } }) task.resume() } 

Aquí, he hecho un diccionario separado para los parámetros.

 var params = ["format":"json", "MobileType":"IOS","MIN":"f8d16d98ad12acdbbe1de647414495ec","UserName":emailTxtField.text,"PWD":passwordTxtField.text,"SigninVia":"SH"]as NSDictionary return params } // You can add your own sets of parameter here. 

Un enfoque simple de Swift 2.0 para realizar una solicitud HTTP GET

La solicitud HTTP es asincrónica, por lo que necesita una forma de obtener el valor devuelto de la solicitud HTTP. Este enfoque usa Notificadores y se distribuye en dos clases.

El ejemplo es verificar el nombre de usuario y la contraseña de un identificador de token utilizando el sitio web http://www.example.com/handler.php?do=CheckUserJson&json=. Ese es el archivo llamado handler.php y tiene una statement de cambio en el hacer parámetro para obtener un enfoque RESTful.

En viewDidLoad configuramos NotifierObserver, configuramos el json y realizamos la llamada a la función getHTTPRequest. Volverá a la función checkedUsernameAndPassword con el parámetro devuelto de la solicitud http.

 override func viewDidLoad() { super.viewDidLoad() // setup the Notification observer to catch the result of check username and password NSNotificationCenter.defaultCenter().addObserver(self, selector: "checkedUsernameAndPassword:", name: CHECK_USERNAME_AND_PASSWORD, object: nil) let username = GlobalVariables.USER_NAME let password = GlobalVariables.PASSWORD // check username and password if let jsonString = Utility.checkUsernameAndPasswordJson(username, password:password){ print("json string returned = \(jsonString)") let url = CHECKUSERJSON+jsonString // CHECKUSERJSON = http://www.example.com/handler.php?do=CheckUserJson&json= // jsonString = {\"username\":\"demo\",\"password\":\"demo\"}" // the php script handles a json request and returns a string identifier Utility.getHTTPRequest(url,notifierId: CHECK_USERNAME_AND_PASSWORD) // the returned identifier is sent to the checkedUsernaeAndPassword function when it becomes availabel. } } 

Primero hay dos funciones estáticas en Utility.swift para codificar el json y luego para hacer la llamada HTTP.

  static func checkUsernameAndPasswordJson(username: String, password: String) -> String?{ let para:NSMutableDictionary = NSMutableDictionary() para.setValue("demo", forKey: "username") para.setValue("demo", forKey: "password") let jsonData: NSData do{ jsonData = try NSJSONSerialization.dataWithJSONObject(para, options: NSJSONWritingOptions()) let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding) as! String return jsonString } catch _ { print ("UH OOO") return nil } } 

y la solicitud Http

  static func getHTTPRequest (url:String , notifierId: String) -> Void{ let urlString = url let config = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: nil) let safeURL = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! if let url = NSURL(string: safeURL){ let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "GET" request.timeoutInterval = 60 let taskData = session.dataTaskWithRequest(request, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in if (data != nil) { let result = NSString(data: data! , encoding: NSUTF8StringEncoding) sendNotification (notifierId, message: String(result), num: 0) }else{ sendNotification (notifierId, message: String(UTF8String: nil), num: -1) } }) taskData.resume() }else{ print("bad urlString = \(urlString)") } } 

La función sendNotification completa el círculo. Observe que en el observador hay un “:” al final de la cadena del selector. Esto permite que la notificación lleve una carga útil en userInfo. Doy esto una cadena y un Int.

  static func sendNotification (key: String, message:String?, num: Int?){ NSNotificationCenter.defaultCenter().postNotificationName( key, object: nil, userInfo: (["message": message!, "num": "\(num!)"]) ) } 

Tenga en cuenta que al usar HTTP está oldFashioned, prefiere HTTPS, consulte ¿Cómo cargo una URL HTTP con la seguridad de transporte de aplicaciones habilitada en iOS 9?

  var post:NSString = "api=myposts&userid=\(uid)&page_no=0&limit_no=10" NSLog("PostData: %@",post); var url1:NSURL = NSURL(string: url)! var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)! var postLength:NSString = String( postData.length ) var request:NSMutableURLRequest = NSMutableURLRequest(URL: url1) request.HTTPMethod = "POST" request.HTTPBody = postData request.setValue(postLength, forHTTPHeaderField: "Content-Length") request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("application/json", forHTTPHeaderField: "Accept") var reponseError: NSError? var response: NSURLResponse? var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError) if ( urlData != nil ) { let res = response as NSHTTPURLResponse!; NSLog("Response code: %ld", res.statusCode); if (res.statusCode >= 200 && res.statusCode < 300) { var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! NSLog("Response ==> %@", responseData); var error: NSError? let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary let success:NSInteger = jsonData.valueForKey("error") as NSInteger //[jsonData[@"success"] integerValue]; NSLog("Success: %ld", success); if(success == 0) { NSLog("Login SUCCESS"); self.dataArr = jsonData.valueForKey("data") as NSMutableArray self.table.reloadData() } else { NSLog("Login failed1"); ZAActivityBar.showErrorWithStatus("error", forAction: "Action2") } } else { NSLog("Login failed2"); ZAActivityBar.showErrorWithStatus("error", forAction: "Action2") } } else { NSLog("Login failed3"); ZAActivityBar.showErrorWithStatus("error", forAction: "Action2") } 

te ayudará seguramente

// Aquí hay un ejemplo que funcionó para mí

// función Swift que publica una solicitud a un servidor con valores clave

 func insertRecords() { let usrID = txtID.text let checkin = lblInOut.text let comment = txtComment.text // The address of the web service let urlString = "http://your_url/checkInOut_post.php" // These are the keys that your are sending as part of the post request let keyValues = "id=\(usrID)&inout=\(checkin)&comment=\(comment)" // 1 - Create the session by getting the configuration and then // creating the session let config = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession(configuration: config, delegate: nil, delegateQueue: nil) // 2 - Create the URL Object if let url = NSURL(string: urlString){ // 3 - Create the Request Object var request = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" // set the key values request.HTTPBody = keyValues.dataUsingEncoding(NSUTF8StringEncoding); // 4 - execute the request let taskData = session.dataTaskWithRequest(request, completionHandler: { (data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in println("\(data)") // 5 - Do something with the Data back if (data != nil) { // we got some data back println("\(data)") let result = NSString(data: data , encoding: NSUTF8StringEncoding) println("\(result)") if result == "OK" { let a = UIAlertView(title: "OK", message: "Attendece has been recorded", delegate: nil, cancelButtonTitle: "OK") println("\(result)") dispatch_async(dispatch_get_main_queue()) { a.show() } } else { // display error and do something else } } else { // we got an error println("Error getting stores :\(error.localizedDescription)") } }) taskData.resume() } } 

Código PHP para obtener los valores clave

$ empID = $ _POST [‘id’];

$ inOut = $ _POST [‘inout’];

$ comment = $ _POST [‘comment’];

Aquí hay un ejemplo muy simple de Swift 4 en un patio de recreo:

 import UIKit // run asynchronously in a playground import PlaygroundSupport PlaygroundPage.current.needsIndefiniteExecution = true // create a url let url = URL(string: "http://www.stackoverflow.com") // create a data task let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in if error != nil { print("there's a problem") } print(String(data: data!, encoding: String.Encoding.utf8) ?? "") } //running the task w/ resume task.resume() 
    Intereting Posts