Making HTTP POST request in Swift using URLSession
or “How to POST a form in Swift using URLSession”
These examples will be using httpbin.org to test our request.
let url = URL(string: "https://httpbin.org/post")
Create a URLRequest object using the URL
var request = URLRequest(url: url!)
request.httpMethod = "POST"
request.setValue(
    "application/x-www-form-urlencoded",
    forHTTPHeaderField: "Content-Type"
)
Create a list of key-values to be sent
let queryItems = [
            URLQueryItem(name: "x", value: 123),
            URLQueryItem(name: "y", value: "hello"),
            URLQueryItem(name: "z", value: "world"),
        ]
Construct the body of the POST request
The URLComponents class can be used to construct the body of the HTTP POST request.
This is generally used to construct the query params for URLs for HTTP GET requests.
// Create a URLComponents object using blank url
var urlComponents = URLComponents(string: "")
// Assign the query items to the object
urlComponents?.queryItems = queryItems
// Fetch the formatted string from the URLComponents object
let request_body = urlComponents!.query!
Set the body of the request variable
request.httpBody = Data(request_body.utf8)
Make the request using URLSession
URLSession.shared.dataTask(with: request) {(data, response, error) in
    // Decode response from the data variable using JSONDecoder
}
