Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make NSURLSession POST request in Swift

Hi I am very beginner for Swift and I am trying to make NSURLSession "Post" request sending some parameter like my below code

According to my below code response not coming from server can some one help me please

BackGroundClass:-

 import UIKit  protocol sampleProtocal{      func getResponse(result:NSDictionary)     func getErrorResponse(error:NSString) }  class BackGroundClass: NSObject {      var delegate:sampleProtocal?      func callPostService(url:String,parameters:NSDictionary){           print("url is===>\(url)")          let request = NSMutableURLRequest(URL: NSURL(string:url)!)          let session = NSURLSession.sharedSession()         request.HTTPMethod = "POST"          //Note : Add the corresponding "Content-Type" and "Accept" header. In this example I had used the application/json.         request.addValue("application/json", forHTTPHeaderField: "Content-Type")         request.addValue("application/json", forHTTPHeaderField: "Accept")          request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters, options: [])          let task = session.dataTaskWithRequest(request) { data, response, error in             guard data != nil else {                 print("no data found: \(error)")                 return             }              do {                 if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {                     print("Response: \(json)")                     self.mainResponse(json)                 } else {                     let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)// No error thrown, but not NSDictionary                     print("Error could not parse JSON: \(jsonStr)")                     self.eroorResponse(jsonStr!)                 }             } catch let parseError {                 print(parseError)// Log the error thrown by `JSONObjectWithData`                 let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)                 print("Error could not parse JSON: '\(jsonStr)'")                 self.eroorResponse(jsonStr!)             }         }          task.resume()     }      func mainResponse(result:NSDictionary){         delegate?.getResponse(result)     }      func eroorResponse(result:NSString){         delegate?.getErrorResponse(result)     } } 

ViewController:-

import UIKit  class ViewController: UIViewController,sampleProtocal {      override func viewDidLoad() {         super.viewDidLoad()          let delegate = BackGroundClass();         delegate.self;          let params = ["scancode":"KK03799-008", "UserName":"admin"] as Dictionary<String, String>          let backGround=BackGroundClass();         backGround.callPostService("url", parameters: params)     }      func getResponse(result: NSDictionary) {         print("Final response is\(result)");     }      func getErrorResponse(error: NSString) {         print("Final Eroor code is\(error)")     } } 
like image 377
Krish Avatar asked Feb 02 '17 08:02

Krish


People also ask

What is NSURLSession in Swift?

Overview. The NSURLSession class and related classes provide an API for downloading data from and uploading data to endpoints indicated by URLs. Your app can also use this API to perform background downloads when your app isn't running or, in iOS, while your app is suspended.

What is URLSessionTask in Swift?

The URLSessionTask class is the base class for tasks in a URL session. Tasks are always part of a session; you create a task by calling one of the task creation methods on a URLSession instance. The method you call determines the type of task.


1 Answers

Swift 4 post example with json payload-

func postAction(_ sender: Any) {     let Url = String(format: "your url")     guard let serviceUrl = URL(string: Url) else { return }     let parameterDictionary = ["username" : "Test", "password" : "123456"]     var request = URLRequest(url: serviceUrl)     request.httpMethod = "POST"     request.setValue("Application/json", forHTTPHeaderField: "Content-Type")     guard let httpBody = try? JSONSerialization.data(withJSONObject: parameterDictionary, options: []) else {         return     }     request.httpBody = httpBody          let session = URLSession.shared     session.dataTask(with: request) { (data, response, error) in         if let response = response {             print(response)         }         if let data = data {             do {                 let json = try JSONSerialization.jsonObject(with: data, options: [])                 print(json)             } catch {                 print(error)             }         }     }.resume() } 
like image 141
Abhishek Jain Avatar answered Sep 17 '22 13:09

Abhishek Jain