Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В этой статье представлен обзор настройки пакета SDK Azure для 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" , чтобы лучше понять потоки в приложении и помочь диагностировать проблемы.