Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan klien HTTP berbasis URLConnection
Ini AWS SDK for Java 2.x menawarkan klien UrlConnectionHttpClient
HTTP yang lebih ringan dibandingkan dengan default. ApacheHttpClient
UrlConnectionHttpClient
Ini didasarkan pada JavaURLConnection
.
UrlConnectionHttpClient
Beban lebih cepat daripada klien HTTP berbasis Apache, tetapi memiliki lebih sedikit fitur. Karena memuat lebih cepat, ini adalah solusi yang baik untuk AWS Lambda
fungsi Java.
Ini UrlConnectionHttpClient
memiliki beberapa opsi yang dapat dikonfigurasi
catatan
UrlConnectionHttpClient
Tidak mendukung metode HTTP PATCH.
Beberapa operasi AWS API memerlukan permintaan PATCH. Nama-nama operasi itu biasanya dimulai denganUpdate*
. Berikut ini adalah beberapa contoh.
-
Beberapa
Update*
operasi di AWS Security Hub API dan juga BatchUpdateFindingsoperasi -
Semua
Update*
operasi API Amazon API Gateway -
Beberapa
Update*
operasi di Amazon WorkDocs API
Jika Anda mungkin menggunakanUrlConnectionHttpClient
, pertama-tama lihat Referensi API untuk AWS layanan yang Anda gunakan. Periksa untuk melihat apakah operasi yang Anda butuhkan menggunakan operasi PATCH.
Akses UrlConnectionHttpClient
Untuk mengkonfigurasi dan menggunakanUrlConnectionHttpClient
, Anda mendeklarasikan ketergantungan pada artefak url-connection-client
Maven dalam file Anda. pom.xml
Berbeda denganApacheHttpClient
, tidak UrlConnectionHttpClient
secara otomatis ditambahkan ke proyek Anda, jadi penggunaan harus secara khusus mendeklarasikannya.
Contoh berikut dari pom.xml
file menunjukkan dependensi yang diperlukan untuk menggunakan dan mengkonfigurasi klien 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>
Gunakan dan konfigurasikan UrlConnectionHttpClient
Anda dapat mengonfigurasi instance UrlConnectionHttpClient
bersama dengan membangun klien layanan, atau Anda dapat mengonfigurasi satu instance untuk dibagikan di beberapa klien layanan.
Dengan salah satu pendekatan, Anda menggunakan UrlConnectionHttpClient.Builder
Praktik terbaik: mendedikasikan sebuah UrlConnectionHttpClient
instance untuk klien layanan
Jika Anda perlu mengonfigurasi instanceUrlConnectionHttpClient
, kami sarankan Anda membuat UrlConnectionHttpClient
instance khusus. Anda dapat melakukannya dengan menggunakan httpClientBuilder
metode pembangun klien layanan. Dengan cara ini, siklus hidup klien HTTP dikelola oleh SDK, yang membantu menghindari potensi kebocoran memori jika UrlConnectionHttpClient
instance tidak ditutup saat tidak lagi diperlukan.
Contoh berikut membuat S3Client
dan mengkonfigurasi instance tertanam UrlConnectionHttpClient
dengan socketTimeout
dan proxyConfiguration
nilai-nilai. proxyConfiguration
Metode ini mengambil ekspresi Java lambda tipe Consumer<ProxyConfiguration.Builder
.
Impor
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.net.URI; import java.time.Duration;
Kode
// 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.
Pendekatan alternatif: bagikan UrlConnectionHttpClient
contoh
Untuk membantu menjaga penggunaan sumber daya dan memori lebih rendah untuk aplikasi Anda, Anda dapat mengonfigurasi UrlConnectionHttpClient
dan membagikannya di beberapa klien layanan. Kumpulan koneksi HTTP akan dibagikan, yang menurunkan penggunaan sumber daya.
catatan
Ketika sebuah UrlConnectionHttpClient
instance dibagikan, Anda harus menutupnya ketika sudah siap untuk dibuang. SDK tidak akan menutup instance saat klien layanan ditutup.
Contoh berikut mengkonfigurasi klien HTTP berbasis URLConnection yang digunakan oleh dua klien layanan. UrlConnectionHttpClient
Instance yang dikonfigurasi diteruskan ke httpClient
metode masing-masing builder. Ketika klien layanan dan klien HTTP tidak lagi diperlukan, kode secara eksplisit menutupnya. Kode menutup klien HTTP terakhir.
Impor
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;
Kode
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();
Ketika Anda menggunakan UrlConnectionHttpClient
dalam aplikasi Anda, Anda harus menyediakan setiap klien layanan dengan URLConnectionHttpClient
instance atau ApacheHttpClient
instance menggunakan httpClientBuilder
metode pembuat klien layanan.
Pengecualian terjadi jika program Anda menggunakan beberapa klien layanan dan kedua hal berikut ini benar:
-
Satu klien layanan dikonfigurasi untuk menggunakan
UrlConnectionHttpClient
instance -
Klien layanan lain menggunakan default
ApacheHttpClient
tanpa secara eksplisit membangunnya dengan metode orhttpClient()
httpClientBuilder()
Pengecualian akan menyatakan bahwa beberapa implementasi HTTP ditemukan di classpath.
Contoh cuplikan kode berikut mengarah ke pengecualian.
// 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();
Hindari pengecualian dengan secara eksplisit mengonfigurasi dengan file. 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();
catatan
Untuk secara eksplisit membuatApacheHttpClient
, Anda harus menambahkan ketergantungan pada apache-client
artefak dalam file proyek Maven Anda.
Contoh konfigurasi proxy
Cuplikan kode berikut menggunakan pembangun konfigurasi proxy untuk klien HTTP koneksi 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();
Properti sistem Java yang setara untuk konfigurasi proxy ditampilkan dalam cuplikan baris perintah berikut.
$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
Pengaturan setara yang menggunakan variabel lingkungan adalah:
// 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
catatan
Klien HTTP berbasis URLConnection saat ini tidak mendukung properti sistem proxy HTTPS atau variabel lingkungan HTTPS_PROXY.