[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 요청을 보내는 예제입니다. 요청에는 name
과 age
라는 두 가지 파라미터가 포함되어 있습니다. 요청은 비동기적으로 처리되며, 응답을 받으면 응답 데이터를 서버로부터 받아오고 출력합니다.
POST 요청에서는 httpMethod
를 "POST"
로 설정하고, httpBody
에 파라미터를 추가해야 합니다. 위의 예제 코드에서 percentEncoded()
함수는 Dictionary를 URL 쿼리 형태로 인코딩하여 Data로 변환하는 역할을 합니다. 이 함수를 사용하여 파라미터를 인코딩하여 httpBody
에 추가합니다.
요약
위의 예제 코드를 사용하여 Swift로 서버로 POST 요청을 보낼 수 있습니다. URLSession을 사용하여 요청을 만들고 보내는 방법을 알아보았습니다. 이를 통해 iOS 애플리케이션에서 서버와의 통신을 간단하게 처리할 수 있습니다.