다음을 통해 공유


Java용 Azure SDK에서 프록시 구성

이 문서에서는 프록시를 적절하게 사용하도록 Java용 Azure SDK를 구성하는 방법에 대한 개요를 제공합니다.

HTTP 프록시 구성

Java용 Azure 클라이언트 라이브러리는 프록시를 구성하는 HttpClient여러 가지 방법을 제공합니다.

프록시를 제공하는 각 방법에는 고유한 장단점이 있으며 다양한 수준의 캡슐화를 제공합니다. 프록시 HttpClient를 구성한 경우 남은 수명 동안 프록시를 사용합니다. 프록시를 개별 HttpClient에 연결하면 애플리케이션이 여러 HttpClient 인스턴스를 사용할 수 있으므로 각각 다른 프록시를 사용하여 애플리케이션의 프록시 사용 요구 사항을 충족할 수 있습니다.

프록시 구성 옵션은 다음과 같습니다.

환경 프록시 사용

기본적으로 HTTP 클라이언트 빌더는 프록시 구성에 대한 환경을 검사합니다. 이 프로세스에서는 Java Configuration API용 Azure SDK를 사용합니다. 작성기에서 클라이언트를 만들 때 호출 Configuration.getGlobalConfiguration()하여 검색된 '전역 구성'의 복사본으로 구성됩니다. 이 호출은 시스템 환경에서 모든 HTTP 프록시 구성에서 읽습니다.

작성기는 환경을 검사하여 다음 환경 구성을 지정된 순서대로 검색합니다.

  1. HTTPS_PROXY
  2. HTTP_PROXY
  3. https.proxy*
  4. http.proxy*

*는 잘 알려진 Java 프록시 속성을 나타냅니다. 자세한 내용은 Oracle 설명서의 Java 네트워킹 및 프록시를 참조하세요.

작성기가 환경 구성을 찾으면 ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration())을 호출하여 ProxyOptions 인스턴스를 만듭니다. 이 문서에서는 형식에 대한 ProxyOptions 자세한 내용을 아래에 제공합니다.

Important

프록시 구성을 사용하려면 Java에서 시스템 환경 속성을 java.net.useSystemProxies .로 설정해야 합니다 true.

또한 시스템 환경 변수에 있는 프록시 구성을 사용하지 않는 HTTP 클라이언트 인스턴스를 만들 수도 있습니다. 기본 동작을 재정의하려면 HTTP 클라이언트 작성기에서 다르게 구성된 Configuration을 명시적으로 설정합니다. 작성기 Configuration 에서 설정하면 더 이상 호출 Configuration.getGlobalConfiguration()되지 않습니다. 예를 들어 Configuration.NONE을 사용하여 configuration(Configuration)을 호출하는 경우 명시적으로 작성기에서 환경의 구성을 검사하지 않도록 방지할 수 있습니다.

다음 예에서는 localhost:8888 값이 지정된 HTTP_PROXY 환경 변수를 사용하여 Fiddler를 프록시로 사용합니다. 이 코드는 Netty 및 OkHttp HTTP 클라이언트를 만드는 방법을 보여 줍니다. (HTTP 클라이언트 구성에 대한 자세한 내용은 를 참조하세요 .HTTP 클라이언트 및 파이프라인.)

export HTTP_PROXY=localhost:8888
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder().build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder().build();

환경 프록시가 사용되지 않도록 하려면 다음 예제와 Configuration.NONE같이 HTTP 클라이언트 작성기를 구성합니다.

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .configuration(Configuration.NONE)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .configuration(Configuration.NONE)
    .build();

구성 프록시 사용

환경에서 읽는 대신 환경에서 이미 허용된 동일한 프록시 설정으로 사용자 지정 Configuration 을 사용하도록 HTTP 클라이언트 빌더를 구성할 수 있습니다. 이 구성은 제한된 사용 사례로 범위가 지정된 재사용 가능한 구성을 사용할 수 있는 기능을 제공합니다. HTTP 클라이언트 작성기에서 빌드하는 HttpClient경우 반환ProxyOptions.fromConfiguration(<Configuration passed into the builder>)된 을 ProxyOptions 사용합니다.

다음 예제에서는 개체에 http.proxy* 설정된 구성을 Configuration 사용하여 Fiddler를 프록시로 인증하는 프록시를 사용합니다.

Configuration configuration = new Configuration()
    .put("java.net.useSystemProxies", "true")
    .put("http.proxyHost", "localhost")
    .put("http.proxyPort", "8888")
    .put("http.proxyUser", "1")
    .put("http.proxyPassword", "1");

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .configuration(configuration)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .configuration(configuration)
    .build();

명시적 프록시 사용

Java 클라이언트 라이브러리는 프록시를 구성하기 위해 Azure 클라이언트 라이브러리 형식으로 작동하는 클래스와 함께 ProxyOptions 제공됩니다. 프록시 요청, 프록시 주소, 프록시 인증 자격 증명 및 비 프록시 호스트를 보내는 데 사용되는 네트워크 프로토콜을 사용하여 구성할 ProxyOptions 수 있습니다. 프록시 네트워크 프로토콜 및 프록시 주소만 필요합니다. 인증 자격 증명을 사용하는 경우 사용자 이름과 암호를 모두 설정해야 합니다.

다음 예에서는 기본 Fiddler 주소(localhost:8888)에 대한 요청을 프록시하는 간단한 ProxyOptions 인스턴스를 만듭니다.

ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));

다음 예제에서는 프록시 인증이 필요한 Fiddler 인스턴스에 요청을 프록시하는 인증을 ProxyOptions 만듭니다.

// Fiddler uses username "1" and password "1" with basic authentication as its proxy authentication requirement.
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888))
    .setCredentials("1", "1");

HTTP 클라이언트 작성기를 ProxyOptions 직접 구성하여 사용할 명시적 프록시를 나타낼 수 있습니다. 이 구성은 프록시를 제공하는 가장 세분화된 방법이며 일반적으로 프록시 요구 사항을 업데이트하기 위해 변경할 수 있는 전달만큼 Configuration 유연하지 않습니다.

다음 예에서는 ProxyOptions를 사용하여 Fiddler를 프록시로 사용합니다.

ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .proxy(proxyOptions)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .proxy(proxyOptions)
    .build();

다음 단계

Java용 Azure SDK의 프록시 구성에 익숙해지면 애플리케이션 내에서 흐름을 보다 잘 이해하고 문제를 진단하는 데 도움이 되는 Java용 Azure SDK의 추적 구성을 참조하세요.