在適用於 Java 的 Azure SDK 中設定 Proxy

本文提供如何設定 Azure SDK for Java 以適當使用 Proxy 的概觀。

HTTP Proxy 組態

適用於 Java 的 Azure 用戶端連結庫提供多種方式來設定的 HttpClientProxy。

每個提供 Proxy 的方法都有自己的優缺點,並提供不同層級的封裝。 當您為 HttpClient設定 Proxy 時,它會在其存留期的其餘時間使用 Proxy。 將 Proxy 系結至個別 HttpClient 可讓應用程式使用多個 HttpClient 實例,其中每個實例都可以使用不同的 Proxy 來滿足應用程式的 Proxy 需求。

Proxy 組態選項如下:

使用環境 Proxy

根據預設,HTTP 用戶端產生器會檢查環境是否有 Proxy 設定。 此程式會使用適用於 Java Configuration 的 Azure SDK API。 當建立器建立用戶端時,它會使用藉由呼叫 Configuration.getGlobalConfiguration()所擷取的「全域組態」複本進行設定。 此呼叫會在系統環境的任何 HTTP Proxy 設定中讀取。

當建置者檢查環境時,它會依指定的順序搜尋下列環境組態:

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

*表示已知的 Java Proxy 屬性。 如需詳細資訊,請參閱 Oracle 檔中的 Java 網路和 Proxy

如果建置者找到任何環境組態,它會藉由呼叫 ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration())來建立 ProxyOptions 實例。 本文提供類型的相關 ProxyOptions 詳細數據。

重要

若要使用任何 Proxy 設定,Java 會要求您將系統環境屬性 java.net.useSystemProxies 設定為 true

您也可以建立 HTTP 用戶端實例,而該實例不會使用系統環境變數中的任何 Proxy 組態。 若要覆寫預設行為,您會在 HTTP 用戶端產生器中明確設定不同的 Configuration 設定。 當您在產生器中設定 Configuration 時,它將不再呼叫 Configuration.getGlobalConfiguration()。 例如,如果您使用呼叫 configuration(Configuration)Configuration.NONE,您可以明確地防止產生器檢查環境是否有組態。

下列範例使用 HTTP_PROXY 具有 值的 localhost:8888 環境變數,以使用 Fiddler 作為 Proxy。 此程式代碼示範如何建立 Netty 和 OkHttp HTTP 用戶端。 (如需 HTTP 用戶端設定的詳細資訊,請參閱 HTTP 用戶端和管線。)

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

若要防止使用環境 Proxy,請使用 設定 HTTP 用戶端產生器 Configuration.NONE,如下列範例所示:

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

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

使用組態 Proxy

您可以設定 HTTP 用戶端產生器,以使用已接受自環境的相同 Proxy 設定的自定義 Configuration ,而不是從環境讀取。 此組態提供可重複使用的設定,其範圍限定為有限的使用案例。 當 HTTP 用戶端產生器建置 HttpClient時,它會使用 ProxyOptionsProxyOptions.fromConfiguration(<Configuration passed into the builder>)傳回的 。

下列範例會 http.proxy* 使用 對象中 Configuration 設定的組態,以使用驗證 Fiddler 做為 Proxy 的 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();

使用明確的 Proxy

Java 用戶端連結庫隨附類別 ProxyOptions ,做為設定 Proxy 的 Azure 用戶端連結庫類型。 您可以使用 ProxyOptions 用來傳送 Proxy 要求、Proxy 位址、Proxy 驗證認證和非 Proxy 主機的網路通訊協議進行設定。 只需要 Proxy 網路協定和 Proxy 位址。 使用驗證認證時,您必須同時設定使用者名稱和密碼。

下列範例會建立一 ProxyOptions 個簡單的實例,以 Proxy 向預設 Fiddler 位址提出要求 (localhost:8888):

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

下列範例會建立一個已 ProxyOptions 驗證的 Proxy 向需要 Proxy 驗證的 Fiddler 實例提出要求:

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

您可以使用 直接設定 ProxyOptions HTTP 用戶端產生器,以指出要使用的明確 Proxy。 此設定是提供 Proxy 的最細微方式,而且通常不像傳遞 Configuration 可變動以更新 Proxy 需求而變動的 一樣具有彈性。

下列範例使用 ProxyOptions Fiddler 作為 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();

下一步

現在您已熟悉適用於 Java 的 Azure SDK 中的 Proxy 設定,請參閱 在適用於 Java 的 Azure SDK 中設定追蹤,以進一步瞭解應用程式內的流程,以及協助診斷問題。