2

I figured it out solution at the bottom

I am trying to make an HTTP post request to my server. Here's what I did

        var request : NSMutableURLRequest = NSMutableURLRequest(URL : NSURL(string : "myURL")
        let session : NSURLSession = NSURLSession.sharedSession()
        request.allHTTPHeaderFields = (headers as [NSObject : AnyObject])
        request.HTTPShouldHandleCookies = true
        request.HTTPMethod = "POST"
        var postData = "frontend=iOS"
        request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
        NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always
        println(request.allHTTPHeaderFields)
        println(request.HTTPBody)
        let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
            let json:JSON = JSON(data: data)
            println(json)
            onCompletion(json, error)
        })
       task.resume()

this is not setting the HTTPRequest.POST

I tried printing the request to the server on the server side. IT said post was empty

POST : [QueryDict : {}]

What am I missing here? Any help is appreciated

Solution :

I mistakenly set the content-value to application/json when in fact it was not a json body. Removing it solved the problem

SphericalCow
  • 345
  • 1
  • 2
  • 13

2 Answers2

0

use https://github.com/Alamofire/Alamofire

easy networking :)

Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
     .response { (request, response, data, error) in
                 println(request)
                 println(response)
                 println(error)
               }

you can use all of the below.

public enum Method: String {
case OPTIONS = "OPTIONS"
case GET = "GET"
case HEAD = "HEAD"
case POST = "POST"
case PUT = "PUT"
case PATCH = "PATCH"
case DELETE = "DELETE"
case TRACE = "TRACE"
case CONNECT = "CONNECT"
}
vinbhai4u
  • 1,329
  • 3
  • 19
  • 36
0

Heres the method I used in my logging library: https://github.com/goktugyil/QorumLogs

    var url = NSURL(string: urlstring)

    var request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST"
    request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)
    var connection = NSURLConnection(request: request, delegate: nil, startImmediately: true)

See How to escape the HTTP params in Swift on the way to correctly encode key-value pairs into the data string.

Community
  • 1
  • 1
Esqarrouth
  • 38,543
  • 21
  • 161
  • 168