[swift] Swift로 HTTPS 요청 보내기

이번에는 Swift를 사용하여 HTTPS 요청을 보내는 방법에 대해 알아보겠습니다.

HTTPS는 보안이 강화된 HTTP 프로토콜로, 암호화된 연결을 통해 데이터를 안전하게 전송합니다. 이를 위해 SSL (Secure Sockets Layer) 또는 TLS (Transport Layer Security) 프로토콜을 사용합니다.

Swift에서 HTTPS 요청을 보내면서 서버의 인증서를 확인하기 위해서는 URLSession을 사용하면 됩니다.

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

먼저, URLSession.shared를 사용하여 URLSession 객체를 생성합니다.

let session = URLSession.shared

다음으로 URLSession 객체를 사용하여 데이터를 받을 수 있는 dataTask(with:completionHandler:) 메서드를 호출하여 HTTP 요청을 보냅니다.

let url = URL(string: "https://example.com/api")!
let task = session.dataTask(with: url) { (data, response, error) in
    if let error = error {
        print("Error: \(error)")
        return
    }
    
    // 요청에 대한 응답 처리
}
task.resume()

dataTask(with:completionHandler:) 메서드의 첫 번째 매개변수에는 요청을 보낼 URL을 전달하고, 두 번째 매개변수에서는 응답을 처리하는 클로저를 전달합니다.

응답을 처리하는 클로저에서는 네트워크 요청에 대한 응답 데이터, 응답 상태 코드, 에러 정보 등을 확인할 수 있습니다.

이제 HTTPS 요청을 보내고 응답을 받을 준비가 되었습니다.

서버의 인증서 확인하기

기본적으로 URLSession은 서버의 인증서를 확인하며, 만약 인증서가 유효하지 않으면 요청이 실패합니다. 그러나 테스트 환경에서는 유효하지 않은 인증서를 사용할 수 있기 때문에 이를 무시하고 HTTPS 요청을 보내는 방법도 있습니다.

유효하지 않은 인증서를 무시하고 HTTPS 요청을 보내려면 URLSessionConfiguration 객체를 생성한 후, URLSession.sharedconfiguration 프로퍼티에 설정해주어야 합니다.

let config = URLSessionConfiguration.default
config.httpAdditionalHeaders = [
    "Accept": "application/json",
    "Content-Type": "application/json"
]
config.timeoutIntervalForRequest = 30
config.timeoutIntervalForResource = 60
    
let session = URLSession(configuration: config)

위의 예제에서는 URLSessionConfiguration.default를 사용하여 기본적인 설정을 그대로 사용하고 있습니다. 이 외에도 httpAdditionalHeaderstimeoutIntervalForRequest, timeoutIntervalForResource 등을 설정할 수 있습니다.

HTTPS 요청을 보내기 전에 URLSessionConfiguration 객체를 생성하고, URLSession.sharedconfiguration 프로퍼티에 설정한 후에 dataTask(with:completionHandler:) 메서드를 사용하여 HTTPS 요청을 보냅니다.

let session = URLSession.shared
let url = URL(string: "https://example.com/api")!
let task = session.dataTask(with: url) { (data, response, error) in
    if let error = error {
        print("Error: \(error)")
        return
    }
    
    // 요청에 대한 응답 처리
}
task.resume()

위의 코드에서는 서버의 인증서를 확인하지 않고 요청을 보내기 때문에, 보안상의 위험성이 있을 수 있으므로 실제 상용 환경에서는 유효한 인증서를 사용해야 합니다.

이렇게 Swift를 사용하여 HTTPS 요청을 보내는 방법에 대해 알아보았습니다. 프로젝트에 맞게 적절한 방법을 선택하여 사용하시기 바랍니다.