Aracılığıyla paylaş


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

Bu makalede, proxy'leri düzgün bir şekilde kullanmak üzere Java için Azure SDK'sını yapılandırmaya yönelik genel bir bakış sağlanmaktadır.

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. HttpClient için bir ara sunucu yapılandırdığınızda, o ömrü boyunca bu ara sunucuyu kullanır. Proxy'nin bir kişiye HttpClient bağlı olması, bir uygulamanın, her birinin farklı bir ara sunucu kullanarak uygulamanın ara sunucu gereksinimlerini karşılayabildiği birden çok HttpClient örneği kullanmasına olanak tanır.

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. Bir istemci oluşturulduğunda, Configuration.getGlobalConfiguration() çağrılarak alınan 'genel yapılandırma' kopyası ile yapılandırılır. Bu çağrı, sistem ortamından herhangi bir HTTP proxy yapılandırmasında okunur.

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 makalede, ProxyOptions türü hakkında aşağıda daha fazla ayrıntı verilmiştir.

Ö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 istemci oluşturucusunda açıkça farklı yapılandırılmış Configuration bir ayarlarsınız. Oluşturucuda bir Configuration ayarladığınızda Configuration.getGlobalConfiguration() artık çağrılmayacak. Ö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();

Konfigürasyon ara sunucusu kullanma

Ortamdan okumak yerine, ortamdan zaten kabul edilmiş olan proxy ayarlarıyla özelleştirilmiş bir Configuration kullanımı için HTTP istemci oluşturucularını yapılandırabilirsiniz. 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 istemci oluşturucu HttpClient'ı oluştururken, ProxyOptions tarafından döndürülen ProxyOptions.fromConfiguration(<Configuration passed into the builder>) öğ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ı, ara sunucu yapılandırmak için Azure istemci kitaplıkları türü olarak işlev gören bir ProxyOptions sınıfla birlikte sevk edilir. 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 kullanırken 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 .