Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make an HTTP request + basic auth in Swift

Tags:

ios

swift

I have a RESTFull service with basic authentication and I want to invoke it from iOS+swift. How and where I must provide Credential for this request?

My code (sorry, I just start learn iOS/obj-c/swift):

class APIProxy: NSObject {     var data: NSMutableData = NSMutableData()          func connectToWebApi() {         var urlPath = "http://xx.xx.xx.xx/BP3_0_32/ru/hs/testservis/somemethod"         NSLog("connection string \(urlPath)")         var url: NSURL = NSURL(string: urlPath)         var request = NSMutableURLRequest(URL: url)         let username = "hs"         let password = "1"         let loginString = NSString(format: "%@:%@", username, password)         let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)         let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromMask(0))         request.setValue(base64LoginString, forHTTPHeaderField: "Authorization")                  var connection: NSURLConnection = NSURLConnection(request: request, delegate: self)                  connection.start()     }               //NSURLConnection delegate method     func connection(connection: NSURLConnection!, didFailWithError error: NSError!) {         println("Failed with error:\(error.localizedDescription)")     }          //NSURLConnection delegate method     func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {         //New request so we need to clear the data object         self.data = NSMutableData()     }          //NSURLConnection delegate method     func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {         //Append incoming data         self.data.appendData(data)     }          //NSURLConnection delegate method     func connectionDidFinishLoading(connection: NSURLConnection!) {         NSLog("connectionDidFinishLoading");     }      } 
like image 367
MrKos Avatar asked Jun 24 '14 06:06

MrKos


People also ask

How do I authenticate an HTTP request?

A client that wants to authenticate itself with the server can then do so by including an Authorization request header with the credentials. Usually a client will present a password prompt to the user and will then issue the request including the correct Authorization header.


1 Answers

You provide credentials in a URLRequest instance, like this in Swift 3:

let username = "user" let password = "pass" let loginString = String(format: "%@:%@", username, password) let loginData = loginString.data(using: String.Encoding.utf8)! let base64LoginString = loginData.base64EncodedString()  // create the request let url = URL(string: "http://www.example.com/")! var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")  // fire off the request // make sure your class conforms to NSURLConnectionDelegate let urlConnection = NSURLConnection(request: request, delegate: self) 

Or in an NSMutableURLRequest in Swift 2:

// set up the base64-encoded credentials let username = "user" let password = "pass" let loginString = NSString(format: "%@:%@", username, password) let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)! let base64LoginString = loginData.base64EncodedStringWithOptions([])  // create the request let url = NSURL(string: "http://www.example.com/") let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")  // fire off the request // make sure your class conforms to NSURLConnectionDelegate let urlConnection = NSURLConnection(request: request, delegate: self) 
like image 118
Nate Cook Avatar answered Oct 05 '22 15:10

Nate Cook