para descargar color bar ios objective-c macos swift foundation
playground

ios - descargar - swift para windows



¿Cómo hacer una solicitud HTTP en Swift? (16)

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


Estoy llamando al 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.


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


// Aquí hay un ejemplo que me funcionó.

// 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''];

$ comentario = $ _POST [''comentario''];


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..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()


En Swift 4.2 y Xcode10.

Este es el enfoque de JSON POST

func yourFunctionName { //Check internet connection let networkReachability = Reachability.forInternetConnection() let networkStatus:Int = (networkReachability?.currentReachabilityStatus())!.rawValue print(networkStatus) if networkStatus == NotReachable.rawValue { let msg = SharedClass.sharedInstance.noNetMsg//Message //Call alert from shared class SharedClass.sharedInstance.alert(view: self, title: "", message: msg) } else { //Call spinner from shared class SharedClass.sharedInstance.activityIndicator(view: self.view)//Play spinner let parameters = "Your parameters here" var request = URLRequest(url: URL(string: url)!) request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.httpMethod = "POST" print("URL : /(request)") request.httpBody = parameters.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 //Stop spinner SharedClass.sharedInstance.stopActivityIndicator() //Stop spinner //Print error in alert SharedClass.sharedInstance.alert(view: self, title: "", message: "/(String(describing: error!.localizedDescription))") return } SharedClass.sharedInstance.stopActivityIndicator() //Stop spinner if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is /(httpStatus.statusCode)") print("response = /(String(describing: response))") } do { let response = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] print(response!) //Your code here } catch let error as NSError { print(error) } } task.resume() } }

Si tienes interés en usar esta función en SharedClass

//My shared class import UIKit class SharedClass: NSObject { static let sharedInstance = SharedClass() func postRequestFunction(apiName: String , parameters: String, onCompletion: @escaping (_ success: Bool, _ error: Error?, _ result: [String: Any]?)->()) { var URL = "your URL here/index.php/***?" URL = URL.replacingOccurrences(of: "***", with: apiName) var request = URLRequest(url: URL(string: URL)!) request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.httpMethod = "POST" print("shared URL : /(request)") request.httpBody = parameters.data(using: .utf8) var returnRes:[String:Any] = [:] let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { onCompletion(false, error, nil) } else { guard let data = data else { onCompletion(false, error, nil) return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode == 200 { do { returnRes = try JSONSerialization.jsonObject(with: data, options: []) as! [String : Any] onCompletion(true, nil, returnRes) } catch let error as NSError { onCompletion(false, error, nil) } } else { onCompletion(false, error, nil) } } } task.resume() } private override init() { }

Y finalmente llamar a esta función como esta ....

SharedClass.sharedInstance.postRequestFunction(apiName: "Your API name", parameters: parameters) { (success, error, result) in print(result!) if success { //Your code here } else { print(error?.localizedDescription ?? "") } }


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

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 realizado la Solicitud HTTP de ambos métodos GET y POST con JSON Analizando 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<NSError?> = 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<NSError?> = 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


Otra opción es el lib de Alamofire que ofrece los métodos de solicitud / respuesta de Chainable.

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 Just , una biblioteca HTTP de estilo de python-requests .

Algunos ejemplos de envío de 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 manera 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 playground

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.


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 URLSession posteriores, se prefiere URLSession .

Usando URLSession

Inicialice un objeto de URL y una URLSessionDataTask desde URLSession . A continuación, ejecute la tarea con resume() .

let url = URL(string: "http://www..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()

Utilizando NSURLConnection

Primero, inicialice una URL y una URLRequest :

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

A continuación, 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)

Solo asegúrese de configurar su delegado en algo que no sea 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

Pruebas en un patio de Xcode

Si desea probar este código en un área de juegos de Xcode, agregue import PlaygroundSupport a su área de juegos, así como la siguiente llamada:

PlaygroundPage.current.needsIndefiniteExecution = true

Esto le permitirá utilizar código asíncrono en los parques infantiles.


Un enfoque Swift 2.0 simple para realizar una solicitud HTTP GET

La solicitud HTTP es asíncrona, por lo que necesita una forma de obtener el valor devuelto de la solicitud HTTP. Este enfoque utiliza notificadores y se distribuye en dos clases.

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

En viewDidLoad configuramos el NotifierObserver, configuramos el json y hacemos 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. } }

Hay dos funciones estáticas en Utility.swift primero 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. Le doy a esto un String 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 el uso de HTTP es anticuado, prefiero HTTPS, consulte ¿Cómo se carga una URL HTTP con la seguridad de transporte de aplicaciones habilitada en iOS 9?


Verifique abajo los códigos:

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<NSURLResponse?>=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<NSURLResponse?>=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. Solicitud Asíncrona

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 es habitual la conexión URL.

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 asíncrona

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. Solicitud GET asíncrona

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. Cargar 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()


Solicitud de datos de Swift 3 utilizando la API 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()


Solución básica de Swift 3

let url = URL(string: "http://www..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()


A continuación se muestra un ejemplo de una solicitud "GET" de muestra.

let urlString = "YOUR_GET_URL" let yourURL = URL(string: urlstring) let dataTask = URLSession.shared.dataTask(with: yourURL) { (data, response, error) in do { let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) print("json --- /(json)") }catch let err { print("err---/(err.localizedDescription)") } } dataTask.resume()


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") }

seguramente te ayudará