클라이언트 생성 및 구성
클라이언트 종속성을 추가한 후, HttpClient 클래스 인스턴스를 생성하고 엔진을 파라미터로 전달하여 클라이언트를 인스턴스화할 수 있습니다:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
val client = HttpClient(CIO)
이 예시에서는 CIO 엔진을 사용합니다. 엔진을 생략할 수도 있습니다:
import io.ktor.client.*
val client = HttpClient()
이 경우, 클라이언트는 빌드 스크립트에 추가된 아티팩트에 따라 엔진을 자동으로 선택합니다. 클라이언트가 엔진을 선택하는 방법은 기본 엔진 문서 섹션에서 확인할 수 있습니다.
클라이언트 구성
기본 구성
클라이언트를 구성하려면 클라이언트 생성자에 추가 함수 파라미터를 전달할 수 있습니다. HttpClientConfig 클래스는 클라이언트 구성의 기본 클래스입니다. 예를 들어, expectSuccess
속성을 사용하여 응답 유효성 검사를 활성화할 수 있습니다:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
val client = HttpClient(CIO) {
expectSuccess = true
}
엔진 구성
engine
함수를 사용하여 엔진을 구성할 수 있습니다:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
val client = HttpClient(CIO) {
engine {
// Configure an engine
}
}
자세한 내용은 엔진 섹션을 참조하세요.
플러그인
플러그인을 설치하려면 클라이언트 구성 블록 내부의 install
함수에 플러그인을 전달해야 합니다. 예를 들어, 로깅(Logging
) 플러그인을 설치하여 HTTP 호출을 기록할 수 있습니다:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*
val client = HttpClient(CIO) {
install(Logging)
}
install
블록 내에서 플러그인을 구성할 수도 있습니다. 예를 들어, 로깅(Logging
) 플러그인의 경우 로거, 로깅 레벨, 그리고 로그 메시지 필터링 조건을 지정할 수 있습니다:
val client = HttpClient(CIO) {
install(Logging) {
logger = Logger.DEFAULT
level = LogLevel.HEADERS
filter { request ->
request.url.host.contains("ktor.io")
}
sanitizeHeader { header -> header == HttpHeaders.Authorization }
}
}
특정 플러그인은 별도의 종속성을 필요로 할 수 있다는 점에 유의하세요.
클라이언트 사용
필요한 모든 종속성을 추가하고 클라이언트를 생성한 후, 이를 사용하여 요청을 수행하고 응답을 수신할 수 있습니다.
클라이언트 닫기
HTTP 클라이언트 작업을 마친 후에는 스레드, 연결, 코루틴용 CoroutineScope
와 같은 리소스를 해제해야 합니다. 이를 위해 HttpClient.close
함수를 호출하세요:
client.close()
close
함수는 새 요청 생성을 금지하지만 현재 활성화된 요청을 종료하지는 않습니다. 모든 클라이언트 요청이 완료된 후에만 리소스가 해제됩니다.
단일 요청에 HttpClient
를 사용해야 하는 경우, 코드 블록 실행 후 자동으로 close
를 호출하는 use
함수를 호출하세요:
val status = HttpClient().use { client ->
// ...
}
HttpClient
를 생성하는 것은 비용이 많이 드는 작업이므로, 여러 요청을 처리할 경우 해당 인스턴스를 재사용하는 것이 좋습니다.