Udostępnij za pośrednictwem


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 dostarczania serwera proxy ma własne zalety i wady i zapewnia różne poziomy hermetyzacji. 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:

Korzystanie z serwera proxy ś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, jest skonfigurowany przy użyciu kopii "konfiguracji globalnej" pobranej przez wywołanie metody Configuration.getGlobalConfiguration(). To wywołanie odczyta w dowolnej konfiguracji serwera proxy HTTP ze środowiska systemowego.

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 dowolną konfigurację ProxyOptions środowiska, tworzy wystąpienie przez wywołanie metody ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()). Ten artykuł zawiera więcej szczegółowych informacji na temat ProxyOptions typu.

Ważne

Aby użyć dowolnej konfiguracji serwera proxy, język Java wymaga ustawienia właściwości java.net.useSystemProxies środowiska systemowego na truewartość .

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 elementu w konstruktorze nie będzie już wywoływana .Configuration.getGlobalConfiguration() Jeśli na przykład wywołasz configuration(Configuration) metodę przy użyciu metody Configuration.NONE, możesz jawnie uniemożliwić konstruktorowi 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 netty i klienta HTTP OkHttp. (Aby uzyskać więcej informacji na temat konfiguracji klienta HTTP, zobacz Klienci HTTP i potoki).

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

Aby zapobiec użyciu serwera proxy środowiska, skonfiguruj konstruktora klienta HTTP za pomocą Configuration.NONEpolecenia , jak pokazano w poniższym przykładzie:

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

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

Korzystanie z 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 kompiluje HttpClientelement , użyje ProxyOptions zwracanego elementu z 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 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();

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 serwera 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 proste ProxyOptions wystąpienie, które serwer proxy żąda 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 uwierzytelnienie ProxyOptions , które serwer proxy żąda do wystąpienia programu Fiddler wymagającego uwierzytelniania 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 narzędzia Fiddler jako serwera 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();

Następne 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.