The answer "Devin Rader" is perfect. For any other users like me, the complete code for SwiftRequest for Swift 3.0 is provided. The original code is Ricky Robint.
Please let us know if any errors have occurred.
Thankx ..
// // SwiftRequest.swift // SwiftRequestTest // // Created by Ricky Robinett on 6/20/14. // Copyright (c) 2015 Ricky Robinett. All rights reserved. // // *********************************************************** // // Modification for Swift 3.0 by Sanjay Sampat on 21.Jun.2017 // // *********************************************************** import Foundation public class SwiftRequest { var session = URLSession.shared public init() { // we should probably be preparing something here... } // GET requests public func get(url: String, auth: [String: String] = [String: String](), params: [String: String] = [String: String](), callback: ((_ err: NSError?, _ response: HTTPURLResponse?, _ body: AnyObject?)->())? = nil) { let qs = dictToQueryString(data: params) request(options: ["url" : url, "auth" : auth, "querystring": qs ], callback: callback ) } // POST requests public func post(url: String, data: [String: String] = [String: String](), auth: [String: String] = [String: String](), callback: ((_ err: NSError?, _ response: HTTPURLResponse?, _ body: AnyObject?)->())? = nil) { let qs = dictToQueryString(data: data) request(options: ["url": url, "method" : "POST", "body" : qs, "auth" : auth] , callback: callback) } // Actually make the request func request(options: [String: Any], callback: ((_ err: NSError?, _ response: HTTPURLResponse?, _ body: AnyObject?)->())?) { if( options["url"] == nil ) { return } var urlString = options["url"] as! String if( options["querystring"] != nil && (options["querystring"] as! String) != "" ) { let qs = options["querystring"] as! String urlString = "\(urlString)?\(qs)" } let url = NSURL(string:urlString) let urlRequest = NSMutableURLRequest(url: url! as URL) if( options["method"] != nil) { urlRequest.httpMethod = options["method"] as! String } if( options["body"] != nil && options["body"] as! String != "" ) { var postData = (options["body"] as! String).data(using: String.Encoding.ascii, allowLossyConversion: true) urlRequest.httpBody = postData urlRequest.setValue("\(postData!.count)", forHTTPHeaderField: "Content-length") } // is there a more efficient way to do this? if( options["auth"] != nil && (options["auth"] as! [String: String]).count > 0) { var auth = options["auth"] as! [String: String] if( auth["username"] != nil && auth["password"] != nil ) { let username = auth["username"] let password = auth["password"] var authorization = "\(username!):\(password!)" if let data = authorization.data(using: String.Encoding.utf8) { //authorization = "Basic " + data.base64EncodedString(options: []) authorization = "Basic " + data.base64EncodedString() } urlRequest.setValue(authorization, forHTTPHeaderField: "Authorization") } } let task = session.dataTask(with: urlRequest as URLRequest, completionHandler: {body, response, err in let resp = response as! HTTPURLResponse? if( err == nil) { if let gotResponse = response { if(gotResponse.mimeType == "text/html") { let bodyStr = NSString(data: body!, encoding:String.Encoding.utf8.rawValue) return callback!(err as NSError?, resp, bodyStr) } else if(gotResponse.mimeType == "application/xml") { let bodyStr = NSString(data: body!, encoding:String.Encoding.utf8.rawValue) return callback!(err as NSError?, resp, bodyStr) } else if(gotResponse.mimeType == "application/json") { // ss pending do { let jsonAnyObject:AnyObject = try JSONSerialization.jsonObject(with: (body! as NSData) as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: AnyObject] as AnyObject return callback!(err as NSError?, resp, jsonAnyObject as AnyObject); } catch _ { } } } } return callback!(err as NSError?, resp, body as AnyObject) }) task.resume() } func request(url: String, callback: ((_ err: NSError?, _ response: HTTPURLResponse?, _ body: AnyObject?)->())? = nil) { request(options: ["url" : url ], callback: callback ) } private func dictToQueryString(data: [String: String]) -> String { var qs = "" for (key, value) in data { let encodedKey = encode(value: key) let encodedValue = encode(value: value) qs += "\(encodedKey)=\(encodedValue)&" } return qs } private func encode(value: String) -> String { let queryCharacters = NSCharacterSet(charactersIn:" =\"#%/<> ?@ \\^`{}[]|&+").inverted if let encodedValue:String = value.addingPercentEncoding(withAllowedCharacters: queryCharacters) { return encodedValue } //let encodedValue:String = value.stringByAddingPercentEncodingWithAllowedCharacters(queryCharacters)! return value } }
Sample code for using the above class mentioned in "Devin Rader"
let URL = "https://api.twilio.com/2010-04-01/Accounts/\(myUserIdForBulkSmsMessageSending)/Messages" var swiftRequest = SwiftRequest(); var data = [ "To" : "+\(replaceNumberToSendSms)", "From" : "+\(replaceNumberFromSendSms)", "Body" : message, "MediaUrl" : theUrlEncodedMessage ]; //print( "=========VV==========" ) //print( "URL: \(URL) " ) //print( "data: \(String(describing: data))" ) //print( "auth: \(myUserIdForBulkSmsMessageSending) \(myUserPasswordForBulkSmsMessageSending)") //print( "=====================" ) swiftRequest.post(url: URL, data: data, auth: ["username" : myUserIdForBulkSmsMessageSending, "password" : myUserPasswordForBulkSmsMessageSending], callback: {err, response, body in if err == nil { print("Success: \(String(describing: response))") if let currentBody = body { // SSTODO PENDING TO HANDLE SUCCESS OF TWILLO OR ERRORS HANDLING OF TWILLO. //print( "=====================" ) //print( " currentBody: \(currentBody) " ) //print( " currentBodyString: \(String(describing: currentBody)) ") //print( "=========^^==========" ) } } else { print("Error: \(String(describing: err))") } });