Configurare i proxy in Azure SDK per Java
Questo articolo offre una panoramica di come configurare Azure SDK per Java per usare correttamente i proxy.
Configurazione del proxy HTTP
Le librerie client di Azure per Java offrono diversi modi per configurare un proxy per un oggetto HttpClient
.
Ogni metodo di fornitura di un proxy ha vantaggi e svantaggi e fornisce diversi livelli di incapsulamento. Dopo aver configurato un proxy per un HttpClient
oggetto , verrà usato il proxy per il resto della durata. La presenza del proxy associato a un singolo utente HttpClient
consente a un'applicazione di usare più HttpClient
istanze in cui ognuno può usare un proxy diverso per soddisfare i requisiti di proxy di un'applicazione.
Le opzioni di configurazione del proxy sono:
Usare un proxy di ambiente
Per impostazione predefinita, i generatori di client HTTP esaminano l'ambiente per le configurazioni proxy. Questo processo usa le API Di Azure SDK per Java Configuration
. Quando il generatore crea un client, viene configurato con una copia della "configurazione globale" recuperata chiamando Configuration.getGlobalConfiguration()
. Questa chiamata leggerà in qualsiasi configurazione proxy HTTP dall'ambiente di sistema.
Quando il generatore esamina l'ambiente, cercherà le configurazioni di ambiente seguenti nell'ordine specificato:
HTTPS_PROXY
HTTP_PROXY
https.proxy*
http.proxy*
*
Rappresenta le proprietà note del proxy Java. Per altre informazioni, vedere Funzionalità di rete e proxy Java nella documentazione di Oracle.
Se il generatore trova una delle configurazioni dell'ambiente, crea un'istanza ProxyOptions
chiamando ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration())
. Questo articolo fornisce altri dettagli di seguito sul ProxyOptions
tipo.
Importante
Per usare qualsiasi configurazione proxy, Java richiede di impostare la proprietà java.net.useSystemProxies
dell'ambiente di sistema su true
.
È anche possibile creare un'istanza client HTTP che non usa alcuna configurazione proxy presente nelle variabili di ambiente di sistema. Per eseguire l'override del comportamento predefinito, impostare in modo esplicito un oggetto configurato Configuration
in modo diverso nel generatore di client HTTP. Quando si imposta un oggetto Configuration
nel generatore, non chiamerà Configuration.getGlobalConfiguration()
più . Ad esempio, se si chiama configuration(Configuration)
usando Configuration.NONE
, è possibile impedire esplicitamente al generatore di controllare l'ambiente per la configurazione.
Nell'esempio seguente viene usata la HTTP_PROXY
variabile di ambiente con valore localhost:8888
per usare Fiddler come proxy. Questo codice illustra la creazione di un client HTTP Netty e OkHttp. Per altre informazioni sulla configurazione del client HTTP, vedere Client HTTP e pipeline.
export HTTP_PROXY=localhost:8888
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder().build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder().build();
Per impedire l'uso del proxy di ambiente, configurare il generatore di client HTTP con Configuration.NONE
, come illustrato nell'esempio seguente:
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
Usare un proxy di configurazione
Anziché leggere dall'ambiente, è possibile configurare i generatori di client HTTP per l'uso di un personalizzato Configuration
con le stesse impostazioni proxy già accettate dall'ambiente. Questa configurazione offre la possibilità di avere configurazioni riutilizzabili con ambito limitato. Quando il generatore di client HTTP compila , HttpClient
userà l'oggetto ProxyOptions
restituito da ProxyOptions.fromConfiguration(<Configuration passed into the builder>)
.
Nell'esempio seguente vengono usate le http.proxy*
configurazioni impostate in un Configuration
oggetto per usare un proxy che autentica Fiddler come 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();
Usare un proxy esplicito
Le librerie client Java vengono fornite con una ProxyOptions
classe che funge da tipo di librerie client di Azure per la configurazione di un proxy. È possibile configurare ProxyOptions
con il protocollo di rete usato per inviare richieste proxy, l'indirizzo proxy, le credenziali di autenticazione proxy e gli host non proxy. Sono necessari solo il protocollo di rete proxy e l'indirizzo proxy. Quando si usano le credenziali di autenticazione, è necessario impostare sia il nome utente che la password.
L'esempio seguente crea un'istanza semplice ProxyOptions
che esegue il proxy delle richieste all'indirizzo Fiddler predefinito (localhost:8888
):
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));
L'esempio seguente crea un oggetto autenticato ProxyOptions
che esegue il proxy delle richieste a un'istanza di Fiddler che richiede l'autenticazione proxy:
// 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");
È possibile configurare i generatori di client HTTP con ProxyOptions
direttamente per indicare un proxy esplicito da usare. Questa configurazione è il modo più granulare per fornire un proxy e in genere non è flessibile come il passaggio di un Configuration
oggetto che è possibile modificare per aggiornare i requisiti di proxy.
L'esempio seguente usa ProxyOptions
per usare Fiddler come 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();
Passaggi successivi
Ora che si ha familiarità con la configurazione del proxy in Azure SDK per Java, vedere Configurare la traccia in Azure SDK per Java per comprendere meglio i flussi all'interno dell'applicazione e per diagnosticare i problemi.