Поделиться через


Настройка прокси-серверов в пакете SDK Azure для Java

В этой статье представлен обзор настройки пакета SDK Azure для Java для правильного использования прокси-серверов.

Конфигурация прокси-сервера HTTP

Клиентские библиотеки Azure для Java предлагают несколько способов настройки прокси-сервера для HttpClient.

Каждый метод предоставления прокси-сервера имеет собственные преимущества и минусы и предоставляет различные уровни инкапсуляции. Когда вы настроили прокси-сервер для объекта HttpClient, он будет использовать прокси-сервер в течение всего времени его существования. Наличие прокси-сервера, привязанного к конкретному пользователю HttpClient, позволяет приложению использовать несколько HttpClient экземпляров, где каждый из них может использовать другой прокси-сервер для выполнения требований к прокси-серверу приложения.

Параметры конфигурации прокси-сервера:

Использование прокси среды

По умолчанию конструкторы HTTP-клиентов проверяют среду на наличие настроек прокси-сервера. Этот процесс использует пакет SDK Azure для API Java Configuration . Когда построитель создает клиент, он настраивается с копией "глобальной конфигурации", полученной путем вызова Configuration.getGlobalConfiguration(). Этот вызов будет считывать любую конфигурацию прокси-сервера HTTP из системной среды.

Когда построитель проверяет среду, он будет искать следующие конфигурации среды в указанном порядке:

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

* представляет хорошо известные свойства прокси-сервера Java. Дополнительные сведения см. в статье "Сеть Java и прокси-серверы " в документации Oracle.

Если построитель находит любую из конфигураций среды, он создает ProxyOptions экземпляр путем вызова ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()). В этой статье приведены дополнительные сведения о типе ProxyOptions .

Это важно

Чтобы использовать любую конфигурацию прокси-сервера, Java требует задать для свойства java.net.useSystemProxies системной среды значение true.

Вы также можете создать экземпляр клиента HTTP, который не использует конфигурацию прокси-сервера, присутствующую в системных переменных среды. Чтобы переопределить поведение по умолчанию, необходимо явно задать по-другому настроенный Configuration в построителе HTTP-клиента. При установке Configuration в конструкторе он больше не будет вызывать Configuration.getGlobalConfiguration(). Например, при вызове configuration(Configuration) с помощью Configuration.NONE можно явно запретить построителю проверять среду для конфигурации.

В следующем примере используется HTTP_PROXY переменная среды со значением localhost:8888 для использования Fiddler в качестве прокси-сервера. Этот код демонстрирует создание netty и http-клиента OkHttp. (Дополнительные сведения о конфигурации клиента HTTP см. в разделе HTTP-клиентов и конвейеров.)

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

Чтобы предотвратить использование прокси-сервера среды, настройте конструктор HTTP-клиента с помощью Configuration.NONE, как показано в следующем примере:

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

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

Использование конфигурации прокси

Вместо того чтобы читать из среды, можно настроить конструктор HTTP-клиента для использования пользовательского Configuration с теми же настройками прокси-сервера, которые уже приняты из среды. Эта конфигурация обеспечивает возможность повторного использования конфигураций, которые относятся к ограниченному варианту использования. Когда создатель HTTP-клиентов строит HttpClient, он будет использовать ProxyOptions, возвращаемый из ProxyOptions.fromConfiguration(<Configuration passed into the builder>).

В следующем примере используется конфигурация, заданная в объекте http.proxy*, чтобы применить прокси-сервер, который подтверждает подлинность 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 поставляются с классом ProxyOptions , который выступает в качестве типа клиентских библиотек Azure для настройки прокси-сервера. Вы можете настроить ProxyOptions сетевой протокол, используемый для отправки прокси-запросов, адреса прокси-сервера, учетных данных проверки подлинности прокси и узлов, не являющихся прокси-серверами. Требуются только протоколы прокси-сети и прокси-адреса. При использовании учетных данных проверки подлинности необходимо задать имя пользователя и пароль.

В следующем примере создается простой ProxyOptions экземпляр, который перенаправляет запросы к адресу Fiddler по умолчанию (localhost:8888):

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

В следующем примере создается аутентифицированный ProxyOptions, который направляет запросы к экземпляру 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");

Вы можете настроить построитель HTTP-клиентов напрямую с помощью ProxyOptions, чтобы указать используемый явный прокси-сервер. Эта конфигурация является наиболее детальным способом предоставления прокси-сервера, но обычно она менее гибкая, чем передача 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();

Дальнейшие шаги

Теперь, когда вы знакомы с конфигурацией прокси-сервера в пакете SDK Azure для Java, ознакомьтесь со статьей "Настройка трассировки в пакете SDK Azure для Java" , чтобы лучше понять потоки в приложении и помочь диагностировать проблемы.