Udostępnij za pomocą


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

Ten artykuł zawiera omówienie sposobu konfigurowania zestawu Azure SDK dla języka Java w celu prawidłowego korzystania z serwerów proxy.

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 serwera HttpClient, będzie on używać serwera proxy do końca okresu jego istnienia. Posiadanie serwera proxy powiązanego z jednostką HttpClient umożliwia aplikacji korzystanie z wielu HttpClient wystąpień, w których każdy może używać innego serwera proxy do spełnienia wymagań serwera proxy aplikacji.

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 . Kiedy budowniczy tworzy klienta, jest on skonfigurowany przy użyciu kopii 'konfiguracji globalnej' pobranej przez wywołanie metody Configuration.getGlobalConfiguration(). To wywołanie wczyta konfigurację każdego serwera proxy HTTP ze zmiennych środowiskowych systemu.

Gdy konstruktor sprawdza środowisko, wyszuka 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ółowych informacji na temat typu ProxyOptions.

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 ustawisz inną konfigurację Configuration w konstruktorze klienta HTTP. Po ustawieniu Configuration w konstruktorze, nie będzie już wywoływał Configuration.getGlobalConfiguration(). 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 Klienty HTTP i potoki).

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, można skonfigurować konstruktorów klienta HTTP tak, aby używali niestandardowego Configuration z tymi samymi ustawieniami serwera proxy, które są już akceptowane ze środowiska. Ta konfiguracja umożliwia korzystanie z konfiguracji wielokrotnego użytku, które są ograniczone do ograniczonego przypadku użycia. Gdy konstruktor klienta HTTP buduje HttpClient, użyje 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 Języka Java są dostarczane z klasą ProxyOptions , która działa jako typ bibliotek klienckich platformy Azure na potrzeby 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 korzystania z 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.