Java için Azure SDK'da proxy'leri yapılandırma

Bu makalede, istemci isteklerini gerekli ağ ve güvenlik sınırlarınız üzerinden yönlendirebilmeniz için Java için Azure SDK proxy'leri yapılandırma adımları gösterilmektedir.

HTTP proxy yapılandırması

Java için Azure istemci kitaplıkları, bir HttpClient için ara sunucu yapılandırmanın birden çok yolunu sunar.

Bir ara sunucu sağlamanın her yönteminin kendi avantajları ve dezavantajları vardır ve farklı kapsülleme düzeyleri sağlar. Bir HttpClient için bir ara sunucu yapılandırdığınızda, kullanım ömrünün geri kalanı boyunca bu ara sunucuyu kullanır. Bir uygulama, ara sunucuyu tek bir HttpClientsunucuya bağlama yoluyla, her birinin bir uygulamanın ara sunucu gereksinimlerini karşılamak için farklı bir ara sunucu kullanabildiği birden çok HttpClient örnek kullanabilir.

Ara sunucu yapılandırma seçenekleri şunlardır:

Ortam proxy kullanın

Varsayılan olarak, HTTP istemci oluşturucuları ortamı ara sunucu yapılandırmaları için inceler. Bu işlem Java Configuration API'leri için Azure SDK'sını kullanır. Oluşturucu bir istemci oluşturduğunda, istemciyi Configuration.getGlobalConfiguration() çağrısıyla alınan genel yapılandırmanın bir kopyasıyla yapılandırır. Bu çağrı, sistem ortamındaki tüm HTTP proxy yapılandırmasını okur.

Oluşturucu ortamı incelediğinde, aşağıdaki ortam yapılandırmalarını belirtilen sırada arar:

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

* iyi bilinen Java proxy özelliklerini temsil eder. Daha fazla bilgi için Oracle belgelerindeki Java Ağı ve Proxy'leri bölümüne bakın.

Eğer oluşturucu, ortam yapılandırmalarından herhangi birini bulursa, ProxyOptions işlevini çağırarak bir ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()) örneği oluşturur. Bu makale, ProxyOptions türü hakkında daha fazla ayrıntı sağlar.

Önemli

HTTPS_PROXY veya HTTP_PROXY öğesini örtük olarak kullanmak için, Java'nın sistem ortamı özelliğini java.net.useSystemProxies olarak true ayarlamanızı gerektirir.

Ayrıca, sistem ortamı değişkenlerinde mevcut herhangi bir ara sunucu yapılandırması kullanmayan bir HTTP istemci örneği de oluşturabilirsiniz. Varsayılan davranışı geçersiz kılmak için, HTTP istemcisi oluşturucusunda farklı şekilde yapılandırılmış bir Configuration açıkça ayarlayın. Oluşturucuda bir Configuration ayarladığınızda, artık Configuration.getGlobalConfiguration() çağırmaz. Örneğin, configuration(Configuration) kullanarak Configuration.NONE çağırırsanız, oluşturucunun yapılandırma için ortamı denetlemesini açıkça engelleyebilirsiniz.

Aşağıdaki örnek, ara sunucu olarak Fiddler'ı kullanmak için değere HTTP_PROXY sahip ortam değişkenini kullanırlocalhost:8888. Bu kod, Netty ve OkHttp HTTP istemcisi oluşturmayı gösterir. HTTP istemci yapılandırması hakkında daha fazla bilgi için bkz. HTTP istemcileri ve işlem hatları.

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

Ortam proxy'sinin kullanılmasını önlemek için, aşağıdaki örnekte gösterildiği gibi ile Configuration.NONEHTTP istemci oluşturucusunu yapılandırın:

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

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

Yapılandırma ara sunucusunu kullan

Ortamdan okumak yerine, HTTP istemci oluşturucularını ortamın zaten kabul ettiği aynı proxy ayarlarıyla özel bir Configuration kullanacak şekilde yapılandırın. Bu yapılandırma, sınırlı bir kullanım örneği kapsamında yeniden kullanılabilir yapılandırmalara sahip olma olanağı sunar. HTTP istemcisi oluşturucusu, HttpClient öğesini oluşturduğunda, ProxyOptions.fromConfiguration(<Configuration passed into the builder>) tarafından döndürülen ProxyOptions öğesini kullanır.

Aşağıdaki örnek http.proxy* ayarlarını, Configuration nesnesinde ayarlanan yapılandırmaları kullanarak Fiddler adlı aracı proxy olarak doğrulayan bir ara sunucu için kullanır.

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();

Açık proxy kullanın

Java istemci kitaplıkları, proxy yapılandırmak için Azure istemci kitaplıklarında kullanılan tür olan bir ProxyOptions sınıfı içerir. Proxy isteklerini göndermek için kullanılan ağ protokolü, proxy adresi, proxy kimlik doğrulama bilgileri ve proxy'lenmeyen sunucular ile ProxyOptions yapılandırabilirsiniz. Yalnızca ara sunucu ağ protokolü ve proxy adresi gereklidir. Kimlik doğrulama kimlik bilgilerini kullandığınızda, hem kullanıcı adını hem de parolayı ayarlamanız gerekir.

Aşağıdaki örnek, varsayılan Fiddler adresine (ProxyOptions) proxy'lik yapan basit bir localhost:8888 örneği oluşturur.

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

Aşağıdaki örnek, ara sunucu kimlik doğrulaması gerektiren bir Fiddler örneğine talepleri iletmek için kimliği doğrulanmış bir ProxyOptions oluşturur.

// 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 istemci oluşturucularını ProxyOptions ile, kullanılacak belirli bir proxy'yi göstermek için doğrudan yapılandırabilirsiniz. Bu yapılandırma, bir vekil sunucu sağlamanın en detaylı yoludur ve genellikle vekil sunucu gereksinimlerini güncellemek için değiştirebileceğiniz bir Configuration geçirmenin yanı kadar esnek değildir.

Aşağıdaki örnekte, Fiddler'ı ara sunucu olarak kullanmak amacıyla ProxyOptions kullanılır:

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();

Sonraki Adımlar

Java için Azure SDK'sında ara sunucu yapılandırması hakkında bilgi edindiğinize göre, uygulamanızdaki akışları daha iyi anlamak ve sorunları tanılamaya yardımcı olmak için bkz. Java için Azure SDK'da izlemeyi yapılandırma .