Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить прокси-серверы в Azure SDK для Java, чтобы можно было направлять клиентские запросы через необходимые границы сети и безопасности.
Конфигурация прокси-сервера HTTP
Клиентские библиотеки Azure для Java предлагают несколько способов настройки прокси-сервера для HttpClient.
Каждый метод предоставления прокси-сервера имеет собственные преимущества и минусы и предоставляет различные уровни инкапсуляции. Когда вы настраиваете прокси-сервер для HttpClient, он использует этот прокси-сервер до конца своего существования. Привязав прокси-сервер к отдельному HttpClient, приложение может использовать несколько экземпляров HttpClient, при этом каждый из них может использовать свой прокси-сервер для выполнения требований приложения к проксированию.
Параметры конфигурации прокси-сервера:
- Использование прокси среды
- Используйте прокси-сервер конфигурации
- Использование явного прокси-сервера
Использование прокси среды
По умолчанию конструкторы HTTP-клиентов проверяют параметры окружения на наличие настроек прокси-сервера. Этот процесс использует пакет SDK Azure для API Java Configuration . Когда построитель создает клиент, он настраивает клиент с копией глобальной конфигурации, полученной путем вызова Configuration.getGlobalConfiguration(). Этот вызов считывает любую конфигурацию прокси-сервера HTTP из системной среды.
Когда построитель проверяет среду, он ищет следующие конфигурации среды в указанном порядке:
HTTPS_PROXYHTTP_PROXYhttps.proxy*http.proxy*
* представляет хорошо известные свойства прокси-сервера Java. Дополнительные сведения см. в статье "Сеть Java и прокси-серверы " в документации Oracle.
Если построитель находит любую из конфигураций среды, он создает ProxyOptions экземпляр путем вызова ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()). В этой статье содержатся дополнительные сведения о типе ProxyOptions .
Это важно
Для неявного использования HTTPS_PROXY или HTTP_PROXY в 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 ConfigurationBuilder()
.putProperty("http.proxyHost", "localhost")
.putProperty("http.proxyPort", "8888")
.putProperty("http.proxyUser", "1")
.putProperty("http.proxyPassword", "1")
.build();
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" , чтобы лучше понять потоки в приложении и помочь диагностировать проблемы.