Condividi tramite


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 HttpClientoggetto , 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:

  1. HTTPS_PROXY
  2. HTTP_PROXY
  3. https.proxy*
  4. 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 , HttpClientuserà 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.