Konfigurera proxyservrar i Azure SDK för Java

Den här artikeln innehåller en översikt över hur du konfigurerar Azure SDK för Java för att använda proxyservrar på rätt sätt.

HTTP-proxykonfiguration

Azure-klientbiblioteken för Java erbjuder flera sätt att konfigurera en proxy för en HttpClient.

Varje metod för att tillhandahålla en proxy har sina egna fördelar och nackdelar och ger olika nivåer av inkapsling. När du har konfigurerat en proxy för en HttpClientanvänder den proxyn under resten av sin livslängd. Med proxyn kopplad till en individ HttpClient kan ett program använda flera HttpClient instanser där var och en kan använda en annan proxy för att uppfylla ett programs proxykrav.

Alternativen för proxykonfiguration är:

Använda en miljöproxy

Som standard inspekterar HTTP-klientbyggare miljön för proxykonfigurationer. Den här processen använder Azure SDK för Java-API Configuration :er. När byggaren skapar en klient konfigureras den med en kopia av den "globala konfiguration" som hämtas genom att anropa Configuration.getGlobalConfiguration(). Det här anropet läser i alla HTTP-proxykonfigurationer från systemmiljön.

När byggaren inspekterar miljön söker den efter följande miljökonfigurationer i den angivna ordningen:

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

* Representerar de välkända Java-proxyegenskaperna. Mer information finns i Java-nätverk och proxyservrar i Oracle-dokumentationen.

Om byggaren hittar någon av miljökonfigurationerna skapar den en ProxyOptions instans genom att anropa ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()). Den här artikeln innehåller mer information nedan om ProxyOptions typen.

Viktigt!

Om du vill använda valfri proxykonfiguration kräver Java att du anger systemmiljöegenskapen java.net.useSystemProxies till true.

Du kan också skapa en HTTP-klientinstans som inte använder någon proxykonfiguration som finns i systemmiljövariablerna. Om du vill åsidosätta standardbeteendet anger du uttryckligen en annan konfigurerad Configuration i HTTP-klientverktyget. När du ställer in en Configuration i byggaren anropas Configuration.getGlobalConfiguration()inte längre . Om du till exempel anropar configuration(Configuration) med kan Configuration.NONEdu uttryckligen förhindra att byggaren inspekterar miljön för konfiguration.

I följande exempel används HTTP_PROXY miljövariabeln med värde localhost:8888 för att använda Fiddler som proxy. Den här koden visar hur du skapar en Netty och en OKHttp HTTP-klient. (Mer information om HTTP-klientkonfiguration finns i HTTP-klienter och pipelines.)

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

Om du vill förhindra att miljöproxyn används konfigurerar du HTTP-klientverktyget med Configuration.NONE, som du ser i följande exempel:

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

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

Använda en konfigurationsproxy

I stället för att läsa från miljön kan du konfigurera HTTP-klientbyggare att använda en anpassad Configuration med samma proxyinställningar som redan har godkänts från miljön. Den här konfigurationen ger möjlighet att ha återanvändbara konfigurationer som är begränsade till ett begränsat användningsfall. När HTTP-klientbyggaren HttpClientskapar använder den den ProxyOptions returnerade från ProxyOptions.fromConfiguration(<Configuration passed into the builder>).

I följande exempel används konfigurationerna http.proxy* som anges i ett Configuration -objekt för att använda en proxy som autentiserar Fiddler som proxy.

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

Använda en explicit proxy

Java-klientbiblioteken levereras med en ProxyOptions klass som fungerar som Azure-klientbibliotekstyp för att konfigurera en proxy. Du kan konfigurera ProxyOptions med det nätverksprotokoll som används för att skicka proxybegäranden, proxyadressen, autentiseringsuppgifter för proxy och värdar som inte är proxyservrar. Endast proxynätverksprotokollet och proxyadressen krävs. När du använder autentiseringsuppgifter måste du ange både användarnamnet och lösenordet.

I följande exempel skapas en enkel ProxyOptions instans som proxyservrar begär till fiddler-standardadressen (localhost:8888):

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

I följande exempel skapas en autentiserad ProxyOptions som proxyservrar begär till en Fiddler-instans som kräver proxyautentisering:

// 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");

Du kan konfigurera HTTP-klientbyggare med ProxyOptions direkt för att ange en explicit proxy att använda. Den här konfigurationen är det mest detaljerade sättet att tillhandahålla en proxy och är vanligtvis inte lika flexibel som att skicka en Configuration som du kan ändra för att uppdatera proxykraven.

I följande exempel används ProxyOptions Fiddler som proxy:

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

Nästa steg

Nu när du är bekant med proxykonfigurationen i Azure SDK för Java kan du läsa Konfigurera spårning i Azure SDK för Java för att bättre förstå flöden i ditt program och för att diagnostisera problem.