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
}