Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье представлен обзор настройки пакета SDK Azure для Java для правильного использования прокси-серверов.
Конфигурация прокси-сервера HTTP
Клиентские библиотеки Azure для Java предлагают несколько способов настройки прокси-сервера для HttpClient
.
Каждый метод предоставления прокси-сервера имеет собственные преимущества и минусы и предоставляет различные уровни инкапсуляции. Когда вы настроили прокси-сервер для объекта HttpClient
, он будет использовать прокси-сервер в течение всего времени его существования. Наличие прокси-сервера, привязанного к конкретному пользователю HttpClient
, позволяет приложению использовать несколько HttpClient
экземпляров, где каждый из них может использовать другой прокси-сервер для выполнения требований к прокси-серверу приложения.
Параметры конфигурации прокси-сервера:
- Использование прокси среды
- Используйте прокси-сервер конфигурации
- Использование явного прокси-сервера
Использование прокси среды
По умолчанию конструкторы HTTP-клиентов проверяют среду на наличие настроек прокси-сервера. Этот процесс использует пакет SDK Azure для API Java Configuration
. Когда построитель создает клиент, он настраивается с копией "глобальной конфигурации", полученной путем вызова Configuration.getGlobalConfiguration()
. Этот вызов будет считывать любую конфигурацию прокси-сервера HTTP из системной среды.
Когда построитель проверяет среду, он будет искать следующие конфигурации среды в указанном порядке:
HTTPS_PROXY
HTTP_PROXY
https.proxy*
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" , чтобы лучше понять потоки в приложении и помочь диагностировать проблемы.