次の方法で共有


Azure SDK for Java でプロキシを構成する

この記事では、プロキシを適切に使用するように Azure SDK for Java を構成する方法の概要について説明します。

HTTP プロキシの構成

Java 用 Azure クライアント ライブラリには、 HttpClientのプロキシを構成する複数の方法が用意されています。

プロキシを提供する各方法には、独自の長所と短所があり、さまざまなレベルのカプセル化が提供されます。 HttpClientのプロキシを構成すると、その有効期間の残りの期間プロキシが使用されます。 個々の HttpClient に関連付けられたプロキシを使用すると、アプリケーションは複数の HttpClient インスタンスを使用できます。このインスタンスでは、それぞれが異なるプロキシを使用してアプリケーションのプロキシ要件を満たすことができます。

プロキシ構成オプションは次のとおりです。

環境プロキシを使用する

既定では、HTTP クライアント ビルダーは、プロキシ構成の環境を検査します。 このプロセスでは、Azure SDK for Java Configuration API を使用します。 ビルダーがクライアントを作成すると、 Configuration.getGlobalConfiguration()を呼び出して取得した "グローバル構成" のコピーを使用して構成されます。 この呼び出しは、システム環境から HTTP プロキシ構成を読み込みます。

ビルダーは、環境を検査するときに、指定された順序で次の環境構成を検索します。

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

*は、よく知られている Java プロキシ プロパティを表します。 詳細については、Oracle ドキュメントの Java ネットワークとプロキシ を参照してください。

ビルダーは、いずれかの環境構成を見つけた場合、ProxyOptionsを呼び出してProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()) インスタンスを作成します。 この記事では、 ProxyOptions の種類について以下で詳しく説明します。

Von Bedeutung

任意のプロキシ構成を使用するには、システム環境プロパティ java.net.useSystemProxiestrue に設定する必要があります。

システム環境変数に存在するプロキシ構成を使用しない HTTP クライアント インスタンスを作成することもできます。 既定の動作をオーバーライドするには、HTTP クライアント ビルダーで異なる構成の Configuration を明示的に設定します。 ビルダーで Configuration を設定すると、 Configuration.getGlobalConfiguration()は呼び出されなくなります。 たとえば、configuration(Configuration)を使用してConfiguration.NONEを呼び出した場合、ビルダーが環境の構成を検査することを明示的に防ぐことができます。

次の例では、 HTTP_PROXY 環境変数と値 localhost:8888 を使用して 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から返されたProxyOptions.fromConfiguration(<Configuration passed into the builder>)を使用します。

次の例では、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 アドレス (ProxyOptions) に要求をプロキシする単純なlocalhost:8888 インスタンスを作成します。

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

使用する明示的なプロキシを示すために、 ProxyOptions を使用して HTTP クライアント ビルダーを直接構成できます。 この構成はプロキシを提供する最も細かい方法であり、一般に、プロキシ要件を更新するために変更できる 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();

次のステップ

Azure SDK for Java でのプロキシ構成について理解した後は、「Azure SDK for Java でのトレースの構成 」を参照して、アプリケーション内のフローをより深く理解し、問題の診断に役立ちます。