shaNnex
shaNnex

Reputation: 1083

Sending custom HTTP headers in swift

I managed to fetch json from my server but now I want to add extra security by way of http headers. This is how my code barely looks like for now:

let urlPath = "http://www.xxxxxxxx.com"
        let url = NSURL(string: urlPath)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
            if ((error) != nil) {
                println("Error")
            } else {
                // process json
                let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary

                println(jsonResult["user"])
            }
        })

The headers that I want to add to this request are the following:

If it helps, I have another app built in Titanium framework which uses this syntax:

xhr.setRequestHeader('uid', userid);
xhr.setRequestHeader('hash', hash);

So, am basically looking for a Swift equivalent.

Upvotes: 3

Views: 5213

Answers (2)

William Kinaan
William Kinaan

Reputation: 28819

You are using dataTaskWithURL while you should use dataTaskWithRequest, that takes NSMutableURLRequest object as an input. Using this object you can set HTTP headers, HTTPBody, or HTTPMethod

        let urlPath = "http://www.xxxxxxxx.com"
        let url = NSURL(string: urlPath)
        let session = NSURLSession.sharedSession()
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "GET" // make it post if you want
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")//This is just an example, put the Content-Type that suites you
        //request.addValue(userid, forHTTPHeaderField: "uid")
        //request.addValue(hash, forHTTPHeaderField: "hash")
        let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
          //do anything you want
        })
        task.resume()

Upvotes: 4

r4id4
r4id4

Reputation: 6087

I suggest you to use Alamofire for networking https://github.com/Alamofire/Alamofire

It is written in Swift and is every easy to use. Have a look at that page.

Upvotes: 1

Related Questions