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 HttpClient
anvä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:
HTTPS_PROXY
HTTP_PROXY
https.proxy*
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.NONE
du 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 HttpClient
skapar 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.