Skip to content

프록시

Ktor HTTP 클라이언트를 사용하면 멀티플랫폼 프로젝트에서 프록시 설정을 구성할 수 있습니다. 지원되는 프록시 유형은 HTTPSOCKS 두 가지입니다.

지원되는 엔진

아래 표는 특정 엔진들에 대한 지원되는 프록시 유형을 보여줍니다.

엔진HTTP 프록시SOCKS 프록시
Apache✖️
Java✖️
Jetty✖️✖️
CIO✖️
Android
OkHttp
JavaScript✖️✖️
Darwin✖️
Curl

참고: 현재 Darwin 엔진의 HTTP 프록시로는 HTTPS 요청이 지원되지 않습니다.

의존성 추가

클라이언트에서 프록시를 구성하기 위해 특정 의존성을 추가할 필요는 없습니다. 필요한 의존성은 다음과 같습니다:

프록시 구성

프록시 설정을 구성하려면 클라이언트 구성 블록 내에서 engine 함수를 호출한 다음 proxy 속성을 사용합니다. 이 속성은 ProxyBuilder 팩토리를 사용하여 생성할 수 있는 ProxyConfig 인스턴스를 허용합니다.

kotlin
val client = HttpClient() {
    engine {
        proxy = // 프록시 구성 생성
    }
}

HTTP 프록시

아래 예시는 ProxyBuilder를 사용하여 HTTP 프록시를 구성하는 방법을 보여줍니다:

kotlin
val client = HttpClient() {
    engine {
        proxy = ProxyBuilder.http("http://sample-proxy-server:3128/")
    }
}

JVM에서 ProxyConfigProxy 클래스에 매핑되므로 다음과 같이 프록시를 구성할 수 있습니다:

kotlin
val client = HttpClient() {
    engine {
        proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("sample-proxy-server", 3128))
    }
}

SOCKS 프록시

아래 예시는 ProxyBuilder를 사용하여 SOCKS 프록시를 구성하는 방법을 보여줍니다:

kotlin
val client = HttpClient() {
    engine {
        proxy = ProxyBuilder.socks(host = "sample-proxy-server", port = 1080)
    }
}

HTTP 프록시와 마찬가지로, JVM에서는 Proxy를 사용하여 프록시 설정을 구성할 수 있습니다:

kotlin
val client = HttpClient() {
    engine {
        proxy = Proxy(Proxy.Type.SOCKS, InetSocketAddress("sample-proxy-server", 1080))
    }
}

프록시 인증 및 권한 부여

프록시 인증 및 권한 부여는 엔진별로 다르며 수동으로 처리해야 합니다. 예를 들어, Ktor 클라이언트를 HTTP 프록시 서버에 기본 인증으로 인증하려면 각 요청Proxy-Authorization 헤더를 다음과 같이 추가하십시오:

kotlin
val client = HttpClient() {
    defaultRequest {
        val credentials = Base64.getEncoder().encodeToString("jetbrains:foobar".toByteArray())
        header(HttpHeaders.ProxyAuthorization, "Basic $credentials")
    }
}

JVM에서 Ktor 클라이언트를 SOCKS 프록시에 인증하려면 java.net.socks.usernamejava.net.socks.password 시스템 속성을 사용할 수 있습니다.