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

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

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

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

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

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

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

По умолчанию построители клиентов HTTP будут проверять среду на наличие конфигураций прокси-сервера. В этом процессе используются API-интерфейсы Configuration пакета SDK Azure для Java. Когда построитель создает клиент, он настраивается с помощью копии "глобальной конфигурации", полученной путем вызова 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, который не использует конфигурацию прокси-сервера в переменных среды системы. Чтобы переопределить поведение по умолчанию, в построителе клиента HTTP необходимо явным образом задать по-разному настроенную Configuration. При установке Configuration в построителе больше не будет вызываться метод Configuration.getGlobalConfiguration(). Например, при вызове configuration(Configuration) с помощью Configuration.NONE можно явно запретить построителю проверять среду для настройки.

В следующем примере используется переменная среды HTTP_PROXY со значением localhost:8888, чтобы использовать Fiddler в качестве прокси-сервера. В следующем примере кода показано создание HTTP-клиента Netty и 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*, заданных в объекте 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 поставляются с классом 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, ознакомьтесь со статьей Настройка трассировки в Azure SDK для Java, чтобы получить сведения о потоках в пределах приложения и найти инструкции для диагностики проблем.