POST request with data in body with Alamofire 4

64,925

Solution 1

You need to send request like below in swift 3

let urlString = "https://httpbin.org/get"

Alamofire.request(urlString, method: .post, parameters: ["foo": "bar"],encoding: JSONEncoding.default, headers: nil).responseJSON {  
response in
  switch response.result {
                case .success:
                    print(response)

                    break
                case .failure(let error):

                    print(error)
                }
}

Swift 5 with Alamofire 5:

AF.request(URL.init(string: url)!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
        print(response.result)

        switch response.result {

        case .success(_):
            if let json = response.value
            {
                successHandler((json as! [String:AnyObject]))
            }
            break
        case .failure(let error):
            failureHandler([error as Error])
            break
        }
    }

Solution 2

Alamofire using post method import UIKit import Alamofire

class ViewController: UIViewController {
    let parameters = [
        "username": "foo",
        "password": "123456"
    ]
    let url = "https://httpbin.org/post"

override func viewDidLoad() {
        super.viewDidLoad()
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
            response in
            switch (response.result) {
            case .success:
                print(response)
                break
            case .failure:
                print(Error.self)
            }
        }
}

Solution 3

This will work better in Swift 4.

let url = "yourlink.php". // This will be your link
let parameters: Parameters = ["User_type": type, "User_name": name, "User_email": email, "User_contact": contact, "User_password": password, "from_referral": referral]      //This will be your parameter

Alamofire.request(url, method: .post, parameters: parameters).responseJSON { response in
    print(response)
}
Share:
64,925
Cagatay
Author by

Cagatay

Updated on February 26, 2021

Comments

  • Cagatay
    Cagatay about 3 years

    how is it possible to send a POST request with a data in the HTTP body with Alamofire 4? I used custom encoding at swift 2.3 it was working good. I converted my code swift 3 and I tried to paramater encoding but not working. This code :

    public struct MyCustomEncoding : ParameterEncoding {
    private let data: Data
    init(data: Data) {
        self.data = data
    }
    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
    
        var urlRequest = try urlRequest.asURLRequest()        
        do {            
                urlRequest.httpBody = data
                urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
        } catch {
            throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
        }
    
        return urlRequest
    }
    

    and Alamofire request :

    let enco : ParameterEncoding = MyCustomEncoding(data: ajsonData)
        Alamofire.request(urlString, method: .post , parameters: [:], encoding: enco , headers: headers).validate()
                    .responseJSON { response in
                        switch response.result {
                        case .success:
                            print(response)
    
                            break
                        case .failure(let error):
    
                            print(error)
                        }
        }