Search code examples
iosswiftafnetworking

Request AFNetworking with json and header in swift 3.2


let header = [
            "Content-Type":"application/json",
            "X-Source":"iOS",
            "Authorization":token]
let strURL = "ValidURL"


let manager = AFHTTPSessionManager()
let serializer = AFHTTPRequestSerializer()
    for (_,dict) in header.enumerated() {
        serializer.setValue("\(dict.value)", forHTTPHeaderField: "\(dict.key)")
    }
    manager.requestSerializer = serializer

   let req = serializer.request(withMethod: "POST", urlString: strURL, parameters: params, error: nil)
   manager.dataTask(with: req as URLRequest) { (response, data, error) in
        print(error)
        print(response)
        print(data)
    }
//No response from this method

Also, I tried:

var request = URLRequest(url: URL(string: strURL)!)
request.httpMethod = "POST"
for (_,dict) in header.enumerated() {
        request.setValue("\(dict.value)", forHTTPHeaderField: "\(dict.key)")
    }
request.httpBody = try! JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)
manager.dataTask(with: request) { (response, data, error) in
     print(error)
     print(response)
     print(data)
}

Even I have tried:

manager.post(strURL, parameters: params, progress: nil, success: { (sessionTask, respose) in
            if let dict = respose as? Dictionary<String,Any> {
                print(dict)
            } else {
            }
        }) { (task, error) in
            print(error)
        }

//It Give me: failed: bad request (400)

Solution

  • There are two problems here

    1. When you use a dataTask method, you get back a task object. You need to call resume() on it when you want the request to be sent.

    2. Your errors indicate that your JSON body is incorrect. That is in your params object which probably does not match what the service is expecting.