Konfigurowanie serwerów proxy w zestawie Azure SDK dla języka Java

W tym artykule pokazano, jak skonfigurować serwery proxy w Azure SDK dla Java, aby można było kierować żądania klientów przez wymaganą sieć i granice zabezpieczeń.

Konfiguracja serwera proxy HTTP

Biblioteki klienta platformy Azure dla języka Java oferują wiele sposobów konfigurowania serwera proxy dla elementu HttpClient.

Każda metoda udostępniania serwera proxy ma własne zalety i wady i zapewnia różne poziomy enkapsulacji. Po skonfigurowaniu serwera proxy dla elementu HttpClient będzie on używać tego serwera proxy przez pozostały czas swojego działania. Łącząc serwer proxy z pojedynczym HttpClient, aplikacja może używać wielu wystąpień HttpClient, z których każde może korzystać z innego serwera proxy, aby spełnić wymagania aplikacji dotyczące użycia serwerów proxy.

Opcje konfiguracji serwera proxy to:

Użyj serwera proxy dla środowiska

Domyślnie konstruktorzy klientów HTTP sprawdzają środowisko pod kątem konfiguracji serwera proxy. Ten proces korzysta z zestawu Azure SDK dla interfejsów API języka Java Configuration . Gdy konstruktor tworzy klienta, konfiguruje klienta przy użyciu kopii konfiguracji globalnej pobranej przez wywołanie metody Configuration.getGlobalConfiguration(). To wywołanie odczytuje dowolną konfigurację serwera proxy HTTP ze środowiska systemowego.

Gdy konstruktor sprawdza środowisko, wyszukuje następujące konfiguracje środowiska w określonej kolejności:

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

Obiekt * reprezentuje dobrze znane właściwości serwera proxy Języka Java. Aby uzyskać więcej informacji, zobacz Java Networking and Proxyxies (Sieci java i serwery proxy ) w dokumentacji firmy Oracle.

Jeśli konstruktor znajdzie którąkolwiek z konfiguracji środowiska, tworzy instancję ProxyOptions poprzez wywołanie ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()). Ten artykuł zawiera więcej szczegółów dotyczących ProxyOptions typu.

Ważne

Aby używać HTTPS_PROXY lub HTTP_PROXY w sposób niejawny, język Java wymaga ustawienia właściwości środowiska systemowego java.net.useSystemProxies na true.

Możesz również utworzyć wystąpienie klienta HTTP, które nie używa żadnej konfiguracji serwera proxy w zmiennych środowiskowych systemu. Aby zastąpić domyślne zachowanie, jawnie ustaw inną konfigurację Configuration w konstruktorze klienta HTTP. Po ustawieniu Configuration w builderze metoda Configuration.getGlobalConfiguration() nie jest już wywoływana. Jeśli na przykład wywołasz configuration(Configuration) przy użyciu Configuration.NONE, możesz jawnie uniemożliwić twórcy inspekcję środowiska pod kątem konfiguracji.

W poniższym przykładzie użyto zmiennej środowiskowej HTTP_PROXY z wartością localhost:8888 , aby użyć programu Fiddler jako serwera proxy. Ten kod pokazuje tworzenie klienta HTTP wykorzystującego Netty i OkHttp. Aby uzyskać więcej informacji na temat konfiguracji klienta HTTP, zobacz Http clients and pipelines (Klienci i potoki HTTP).

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

Aby zapobiec użyciu proxy środowiskowego, skonfiguruj konstruktora klienta HTTP za pomocą Configuration.NONE polecenia, jak pokazano w poniższym przykładzie.

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

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

Użyj serwera proxy konfiguracji

Zamiast odczytywać ze środowiska, skonfiguruj konstruktory klientów HTTP tak, aby używały niestandardowego Configuration z tymi samymi ustawieniami serwera proxy, które są już obsługiwane przez środowisko. Ta konfiguracja umożliwia korzystanie z konfiguracji wielokrotnego użytku, które są ograniczone do ograniczonego przypadku użycia. Gdy konstruktor klienta HTTP tworzy HttpClient, używa obiektu ProxyOptions, zwróconego przez ProxyOptions.fromConfiguration(<Configuration passed into the builder>).

W poniższym przykładzie http.proxy* użyto konfiguracji ustawionych w Configuration obiekcie, aby użyć serwera proxy, który uwierzytelnia program Fiddler jako serwer proxy.

Configuration configuration = new ConfigurationBuilder()
    .putProperty("http.proxyHost", "localhost")
    .putProperty("http.proxyPort", "8888")
    .putProperty("http.proxyUser", "1")
    .putProperty("http.proxyPassword", "1")
    .build();

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

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

Używanie jawnego serwera proxy

Biblioteki klienckie Java zawierają klasę działającą ProxyOptions jako typ bibliotek klienckich Azure do konfigurowania serwera proxy. Można skonfigurować ProxyOptions za pomocą protokołu sieciowego używanego do wysyłania żądań serwera proxy, adresu serwera proxy, poświadczeń uwierzytelniania serwera proxy i hostów innych niż proxy. Wymagany jest tylko protokół sieciowy i adres proxy. W przypadku używania poświadczeń uwierzytelniania należy ustawić zarówno nazwę użytkownika, jak i hasło.

Poniższy przykład tworzy prostą instancję ProxyOptions, która pośredniczy w żądaniach do domyślnego adresu programu Fiddler (localhost:8888):

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

W poniższym przykładzie utworzono uwierzytelniony ProxyOptions, który przekazuje żądania do instancji programu Fiddler wymagającej uwierzytelnienia serwera proxy.

// 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");

Konstruktory klientów HTTP można skonfigurować bezpośrednio, ProxyOptions aby wskazać jawny serwer proxy do użycia. Ta konfiguracja jest najbardziej szczegółowym sposobem zapewnienia serwera proxy i ogólnie nie jest tak elastyczna, jak przekazywanie elementu Configuration , które można mutować w celu zaktualizowania wymagań dotyczących serwera proxy.

W poniższym przykładzie użyto ProxyOptions do użycia Fiddler jako proxy.

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();

Dalsze kroki

Teraz, gdy znasz już konfigurację serwera proxy w zestawie Azure SDK dla języka Java, zobacz Konfigurowanie śledzenia w zestawie Azure SDK dla języka Java , aby lepiej zrozumieć przepływy w aplikacji i ułatwić diagnozowanie problemów.