Configurare il client HTTP basato su URLConnection - AWS SDK for Java 2.x

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurare il client HTTP basato su URLConnection

AWS SDK for Java 2.x Offre un client UrlConnectionHttpClient HTTP più leggero rispetto a quello predefinito. ApacheHttpClient UrlConnectionHttpClientÈ basato su Java. URLConnection

Si UrlConnectionHttpClient carica più rapidamente rispetto al client HTTP basato su Apache, ma ha meno funzionalità. Poiché si carica più rapidamente, è una buona soluzione per le funzioni Java. AWS Lambda

UrlConnectionHttpClientHa diverse opzioni configurabili a cui è possibile accedere.

Nota

Non UrlConnectionHttpClient supporta il metodo HTTP PATCH.

Alcune operazioni AWS API richiedono richieste PATCH. I nomi di queste operazioni di solito iniziano conUpdate*. Di seguito sono riportati alcuni esempi.

Se puoi utilizzare ilUrlConnectionHttpClient, consulta innanzitutto l'API Reference relativo a Servizio AWS quello che stai utilizzando. Verifica se le operazioni necessarie utilizzano l'operazione PATCH.

Accedi al UrlConnectionHttpClient

Per configurare e utilizzareUrlConnectionHttpClient, dichiari una dipendenza dall'artefatto url-connection-client Maven nel tuo file. pom.xml

A differenza diApacheHttpClient, non UrlConnectionHttpClient viene aggiunto automaticamente al progetto, quindi use deve dichiararlo specificamente.

Il seguente esempio di pom.xml file mostra le dipendenze necessarie per utilizzare e configurare il client HTTP.

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.17.290</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- other dependencies such as s3 or dynamodb --> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </dependency> </dependencies>

Usa e configura il UrlConnectionHttpClient

È possibile configurare un'istanza UrlConnectionHttpClient insieme alla creazione di un client di servizio oppure configurare una singola istanza da condividere tra più client di servizio.

Con entrambi gli approcci, si utilizza UrlConnectionHttpClient.Builder per configurare le proprietà per il client HTTP basato su URLConnection.

Procedura consigliata: dedicare un'istanza a un client di servizio UrlConnectionHttpClient

Se devi configurare un'istanza diUrlConnectionHttpClient, ti consigliamo di creare l'UrlConnectionHttpClientistanza dedicata. Puoi farlo utilizzando il httpClientBuilder metodo del builder del client del servizio. In questo modo, il ciclo di vita del client HTTP viene gestito dall'SDK, che aiuta a evitare potenziali perdite di memoria se l'UrlConnectionHttpClientistanza non viene chiusa quando non è più necessaria.

L'esempio seguente crea S3Client e configura l'istanza incorporata di with and values. UrlConnectionHttpClient socketTimeout proxyConfiguration Il proxyConfiguration metodo accetta un'espressione lambda Java di tipo. Consumer<ProxyConfiguration.Builder>

Importazioni

import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.net.URI; import java.time.Duration;

Codice

// Singleton: Use the s3Client for all requests. S3Client s3Client = S3Client.builder() .httpClientBuilder(UrlConnectionHttpClient.builder() .socketTimeout(Duration.ofMinutes(5)) .proxyConfiguration(proxy -> proxy.endpoint(URI.create("http://proxy.mydomain.net:8888")))) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close the s3client.

Approccio alternativo: condividi un'istanza UrlConnectionHttpClient

Per ridurre l'utilizzo di risorse e memoria per l'applicazione, è possibile configurarne un'applicazione UrlConnectionHttpClient e condividerla tra più client di servizio. Il pool di connessioni HTTP verrà condiviso, il che riduce l'utilizzo delle risorse.

Nota

Quando un'UrlConnectionHttpClientistanza è condivisa, è necessario chiuderla quando è pronta per essere eliminata. L'SDK non chiuderà l'istanza quando il client del servizio viene chiuso.

L'esempio seguente configura un client HTTP basato su URLConnection utilizzato da due client di servizio. L'UrlConnectionHttpClientistanza configurata viene passata al httpClient metodo di ogni builder. Quando i client di servizio e il client HTTP non sono più necessari, il codice li chiude esplicitamente. Il codice chiude per ultimo il client HTTP.

Importazioni

import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.ProxyConfiguration; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client; import java.net.URI; import java.time.Duration;

Codice

SdkHttpClient urlHttpClient = UrlConnectionHttpClient.create(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); urlHttpClient.close();

Quando si utilizza il UrlConnectionHttpClient nella propria applicazione, è necessario fornire a ciascun client di servizio un'URLConnectionHttpClientistanza o un'ApacheHttpClientistanza utilizzando il httpClientBuilder metodo del service client builder.

Si verifica un'eccezione se il programma utilizza più client di servizio ed entrambe le seguenti condizioni sono vere:

  • Un client di servizio è configurato per utilizzare un'UrlConnectionHttpClientistanza

  • Un altro client di servizio utilizza l'impostazione predefinita ApacheHttpClient senza crearla esplicitamente con i metodi httpClient() o httpClientBuilder()

L'eccezione indicherà che nel classpath sono state trovate più implementazioni HTTP.

Il seguente frammento di codice di esempio porta a un'eccezione.

// The dynamoDbClient uses the UrlConnectionHttpClient DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); // The s3Client below uses the ApacheHttpClient at runtime, without specifying it. // An SdkClientException is thrown with the message that multiple HTTP implementations were found on the classpath. S3Client s3Client = S3Client.create(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();

Evita l'eccezione configurando esplicitamente il con un. S3Client ApacheHttpClient

DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); S3Client s3Client = S3Client.builder() .httpClient(ApacheHttpClient.create()) // Explicitly build the ApacheHttpClient. .build(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
Nota

Per creare esplicitamente ilApacheHttpClient, è necessario aggiungere una dipendenza dall'apache-clientartefatto nel file di progetto Maven.

Esempio di configurazione del proxy

Il seguente frammento di codice utilizza il generatore di configurazione del proxy per il client HTTP di connessione URL.

SdkHttpClient urlHttpClient = UrlConnectionHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://example.com:1234")) .username("username") .password("password") .addNonProxyHost("localhost") .addNonProxyHost("host.example.com") .build()) .build();

Le proprietà di sistema Java equivalenti per la configurazione del proxy sono mostrate nel seguente frammento di riga di comando.

$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App

La configurazione equivalente che utilizza le variabili di ambiente è:

// Set the following environment variables. // $ export HTTP_PROXY="http://username:password@example.com:1234" // $ export NO_PROXY="localhost|host.example.com" // Set the 'useSystemPropertyValues' to false on the proxy configuration. SdkHttpClient apacheHttpClient = UrlConnectionHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
Nota

Il client HTTP basato su URLConnection attualmente non supporta le proprietà del sistema proxy HTTPS o la variabile di ambiente HTTPS_PROXY.