[swift] Swift로 POST 요청 보내기

iOS 애플리케이션을 개발하다 보면 서버에 요청을 보내야 할 때가 있습니다. 이때 서버와의 통신은 HTTP 요청을 사용해야 합니다. 이번 포스트에서는 Swift 언어를 사용하여 서버로 POST 요청을 보내는 방법에 대해 알아보겠습니다.

URLSession을 사용하여 POST 요청 보내기

Swift에서는 URL 세션(URLSession)을 사용하여 HTTP 요청을 보낼 수 있습니다. POST 요청을 보내려면 URLRequest를 만든 다음, 해당 요청에 필요한 파라미터를 추가하고, URLSession을 통해 요청을 보내주어야 합니다.

import Foundation

func sendPostRequest() {
    guard let url = URL(string: "https://example.com/post") else { return }
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    
    let parameters = ["name": "John", "age": "30"]
    request.httpBody = parameters.percentEncoded()

    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if let error = error {
            print("POST Request Error:", error)
            return
        }
        
        guard let data = data else {
            print("No data received")
            return
        }
        
        // 서버 응답 처리
        let responseString = String(data: data, encoding: .utf8)
        print("POST Response:", responseString)
    }
    
    task.resume()
}

extension Dictionary {
    /// Dictionary를 percent-encoding된 Data로 변경합니다.
    func percentEncoded() -> Data? {
        return map { key, value in
            let percentEncodedKey = "\(key)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
            let percentEncodedValue = "\(value)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
            return "\(percentEncodedKey)=\(percentEncodedValue)"
        }
        .joined(separator: "&")
        .data(using: .utf8)
    }
}

fileprivate extension CharacterSet {
    /// URL 쿼리의 값으로 허용되는 문자를 설정합니다.
    static let urlQueryValueAllowed: CharacterSet = {
        var allowed = CharacterSet.urlQueryAllowed
        allowed.remove(charactersIn: "&")
        return allowed
    }()
}

위의 코드는 https://example.com/post로 POST 요청을 보내는 예제입니다. 요청에는 nameage라는 두 가지 파라미터가 포함되어 있습니다. 요청은 비동기적으로 처리되며, 응답을 받으면 응답 데이터를 서버로부터 받아오고 출력합니다.

POST 요청에서는 httpMethod"POST"로 설정하고, httpBody에 파라미터를 추가해야 합니다. 위의 예제 코드에서 percentEncoded() 함수는 Dictionary를 URL 쿼리 형태로 인코딩하여 Data로 변환하는 역할을 합니다. 이 함수를 사용하여 파라미터를 인코딩하여 httpBody에 추가합니다.

요약

위의 예제 코드를 사용하여 Swift로 서버로 POST 요청을 보낼 수 있습니다. URLSession을 사용하여 요청을 만들고 보내는 방법을 알아보았습니다. 이를 통해 iOS 애플리케이션에서 서버와의 통신을 간단하게 처리할 수 있습니다.

참고 자료