[swift] Swift로 HTTP 요청에서 헤더 가져오기

Swift를 사용하여 HTTP 요청을 보낼 때, 때로는 요청의 헤더를 가져와야 할 때가 있습니다. 이 블로그 포스트에서는 Swift에서 HTTP 요청의 헤더를 가져오는 방법에 대해 알아보겠습니다.

URL 요청 만들기

먼저, URLRequest 객체를 사용하여 URL 요청을 만들어야 합니다. URLRequest는 HTTP 요청에 대한 정보를 포함하는 객체입니다. 아래는 URLRequest를 만드는 간단한 예제입니다.

import Foundation

// URL 생성
let url = URL(string: "https://example.com/api")!

// URLRequest 생성
var request = URLRequest(url: url)

// HTTP 메서드 설정
request.httpMethod = "GET"

// 헤더 추가
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer <access_token>", forHTTPHeaderField: "Authorization")

위의 예제에서는 HTTPS로 보호되는 “https://example.com/api” 주소를 가진 URL 객체를 생성하고, 이를 기반으로 URLRequest 객체를 만들었습니다. 요청은 GET 메서드를 사용하며, Content-Type 및 Authorization 헤더가 추가되었습니다. 필요에 따라 다른 헤더를 추가할 수 있습니다.

헤더 가져오기

이제 URLRequest 객체를 사용하여 URLSession을 초기화하고, 이를 통해 요청을 보낼 수 있습니다. 응답을 받은 후에는 URLSessionDataTask를 사용하여 헤더를 가져올 수 있습니다. 아래는 헤더를 가져오는 예제입니다.

import Foundation

let url = URL(string: "https://example.com/api")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer <access_token>", forHTTPHeaderField: "Authorization")

let session = URLSession.shared

let task = session.dataTask(with: request) { (data, response, error) in
    guard let httpResponse = response as? HTTPURLResponse,
          let headers = httpResponse.allHeaderFields as? [String: String] else {
        return
    }
    
    // 헤더 가져오기
    let contentType = headers["Content-Type"]
    let etag = headers["ETag"]
    
    // 헤더 사용
    print("Content-Type: \(contentType ?? "")")
    print("ETag: \(etag ?? "")")
}

task.resume()

위의 예제에서는 URLSession을 사용하여 요청을 보내고, 응답을 받았습니다. HTTPURLResponse를 사용하여 응답 객체의 헤더를 가져올 수 있습니다. 헤더에서 필요한 정보를 추출하고, 필요에 따라 사용할 수 있습니다.

결론

이렇게 Swift에서 HTTP 요청의 헤더를 가져오는 방법을 살펴보았습니다. URLRequest 객체를 사용하여 헤더를 추가하고, URLSession을 통해 요청을 보낸 후에 응답 객체에서 헤더를 가져올 수 있습니다. 이를 통해 HTTP 요청과 관련된 정보를 처리할 수 있습니다.

더 자세한 내용은 Apple의 공식 문서를 참조하십시오.