[swift] Swift로 멀티파트 HTTP 요청 보내기

HTTP 요청에서 멀티파트 데이터를 보내는 것은 많은 경우에 사용되는 일반적인 작업입니다. 예를 들어, 이미지나 파일을 서버에 업로드할 때 멀티파트 요청을 사용할 수 있습니다. 이번 글에서는 Swift를 사용하여 멀티파트 HTTP 요청을 보내는 방법에 대해 알아보겠습니다.

URLSession과 URLRequest

Swift에서 멀티파트 요청을 보내려면 URLSessionURLRequest를 사용해야 합니다. URLSession은 서버와의 통신을 관리하는 객체이며, URLRequest는 특정 URL로 요청을 만드는 객체입니다.

멀티파트 요청 만들기

다음은 멀티파트 요청을 생성하는 예제 코드입니다.

import Foundation

func createMultiPartRequest() -> URLRequest {
    let url = URL(string: "http://example.com/upload")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    let boundary = "Boundary-\(UUID().uuidString)"
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

    var data = Data()

    // 첨부 파일 데이터 추가
    data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
    data.append("Content-Disposition: form-data; name=\"file\"; filename=\"image.jpg\"\r\n".data(using: .utf8)!)
    data.append("Content-Type: image/jpeg\r\n\r\n".data(using: .utf8)!)
    data.append(imageData) // 이미지 데이터

    // 추가적인 필드 데이터 추가
    data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
    data.append("Content-Disposition: form-data; name=\"name\"\r\n\r\n".data(using: .utf8)!)
    data.append("John Doe".data(using: .utf8)!)

    // 멀티파트 요청의 마지막 부분 추가
    data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)

    request.httpBody = data

    return request
}

위의 코드는 createMultiPartRequest()라는 함수를 정의하고 있습니다. 이 함수는 URLRequest 객체를 생성하여 멀티파트 요청을 만듭니다. 예를 들어, image.jpg라는 파일과 name이라는 필드 데이터를 첨부한 멀티파트 요청을 만들어 반환합니다.

요청 보내기

createMultiPartRequest() 함수를 사용하여 생성된 요청을 서버에 보내는 방법은 다음과 같습니다.

let session = URLSession.shared
let request = createMultiPartRequest()

let task = session.dataTask(with: request) { (data, response, error) in
    // 응답 처리
}

task.resume()

위의 코드에서는 URLSession.shared를 사용하여 URLSession 객체를 생성한 다음, createMultiPartRequest() 함수를 호출하여 요청을 생성합니다. 마지막으로, dataTask(with:completionHandler:) 메서드를 사용하여 요청을 보내고 응답을 처리합니다.

결론

위의 예제 코드를 사용하면 Swift로 멀티파트 HTTP 요청을 보낼 수 있습니다. 멀티파트 요청을 사용하면 파일 업로드와 같은 작업을 더욱 간편하게 처리할 수 있습니다. 멀티파트 요청은 서버와의 통신에서 광범위하게 사용되기 때문에, 이를 활용하는 방법을 익히는 것은 개발자로서 중요한 스킬입니다.

참고: Swift Documentation