프록시
Ktor HTTP 클라이언트를 사용하면 멀티플랫폼 프로젝트에서 프록시 설정을 구성할 수 있습니다. 지원되는 프록시 유형은 HTTP 및 SOCKS 두 가지입니다.
지원되는 엔진
아래 표는 특정 엔진들에 대한 지원되는 프록시 유형을 보여줍니다.
엔진 | HTTP 프록시 | SOCKS 프록시 |
---|---|---|
Apache | ✅ | ✖️ |
Java | ✅ | ✖️ |
Jetty | ✖️ | ✖️ |
CIO | ✅ | ✖️ |
Android | ✅ | ✅ |
OkHttp | ✅ | ✅ |
JavaScript | ✖️ | ✖️ |
Darwin | ✅ | ✖️ |
Curl | ✅ | ✅ |
참고: 현재 Darwin 엔진의 HTTP 프록시로는 HTTPS 요청이 지원되지 않습니다.
의존성 추가
클라이언트에서 프록시를 구성하기 위해 특정 의존성을 추가할 필요는 없습니다. 필요한 의존성은 다음과 같습니다:
프록시 구성
프록시 설정을 구성하려면 클라이언트 구성 블록 내에서 engine
함수를 호출한 다음 proxy
속성을 사용합니다. 이 속성은 ProxyBuilder 팩토리를 사용하여 생성할 수 있는 ProxyConfig
인스턴스를 허용합니다.
val client = HttpClient() {
engine {
proxy = // 프록시 구성 생성
}
}
HTTP 프록시
아래 예시는 ProxyBuilder
를 사용하여 HTTP 프록시를 구성하는 방법을 보여줍니다:
val client = HttpClient() {
engine {
proxy = ProxyBuilder.http("http://sample-proxy-server:3128/")
}
}
JVM에서 ProxyConfig
는 Proxy 클래스에 매핑되므로 다음과 같이 프록시를 구성할 수 있습니다:
val client = HttpClient() {
engine {
proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("sample-proxy-server", 3128))
}
}
SOCKS 프록시
아래 예시는 ProxyBuilder
를 사용하여 SOCKS 프록시를 구성하는 방법을 보여줍니다:
val client = HttpClient() {
engine {
proxy = ProxyBuilder.socks(host = "sample-proxy-server", port = 1080)
}
}
HTTP 프록시와 마찬가지로, JVM에서는 Proxy
를 사용하여 프록시 설정을 구성할 수 있습니다:
val client = HttpClient() {
engine {
proxy = Proxy(Proxy.Type.SOCKS, InetSocketAddress("sample-proxy-server", 1080))
}
}
프록시 인증 및 권한 부여
프록시 인증 및 권한 부여는 엔진별로 다르며 수동으로 처리해야 합니다. 예를 들어, Ktor 클라이언트를 HTTP 프록시 서버에 기본 인증으로 인증하려면 각 요청에 Proxy-Authorization
헤더를 다음과 같이 추가하십시오:
val client = HttpClient() {
defaultRequest {
val credentials = Base64.getEncoder().encodeToString("jetbrains:foobar".toByteArray())
header(HttpHeaders.ProxyAuthorization, "Basic $credentials")
}
}
JVM에서 Ktor 클라이언트를 SOCKS 프록시에 인증하려면 java.net.socks.username
및 java.net.socks.password
시스템 속성을 사용할 수 있습니다.