

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Konfigurasikan klien HTTP URLConnection berbasis
<a name="http-configuration-url"></a>

Ini AWS SDK for Java 2.x menawarkan klien `[UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html)` HTTP yang lebih ringan dibandingkan dengan default. `ApacheHttpClient` `UrlConnectionHttpClient`Ini didasarkan pada Java`[URLConnection](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/URLConnection.html)`.

`UrlConnectionHttpClient`Beban lebih cepat daripada klien HTTP berbasis Apache, tetapi memiliki lebih sedikit fitur. Karena memuat lebih cepat, ini adalah [solusi yang baik](lambda-optimize-starttime.md) untuk AWS Lambda fungsi Java.

Ini `UrlConnectionHttpClient` memiliki beberapa [opsi yang dapat dikonfigurasi](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html) yang dapat Anda akses.

**catatan**  
`UrlConnectionHttpClient`Tidak mendukung metode HTTP PATCH.   
Beberapa operasi AWS API memerlukan permintaan PATCH. Nama-nama operasi itu biasanya dimulai dengan`Update*`. Berikut ini adalah beberapa contoh.  
[Beberapa `Update*` operasi](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_Operations.html) di AWS Security Hub CSPM API dan juga [BatchUpdateFindings](https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_BatchUpdateFindings.html)operasi
Semua [`Update*`operasi](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html) API Amazon API Gateway
Jika Anda mungkin menggunakan`UrlConnectionHttpClient`, pertama-tama lihat Referensi API untuk Layanan AWS yang Anda gunakan. Periksa untuk melihat apakah operasi yang Anda butuhkan menggunakan operasi PATCH.

## Akses `UrlConnectionHttpClient`
<a name="http-url-dependency"></a>

Untuk mengkonfigurasi dan menggunakan`UrlConnectionHttpClient`, Anda mendeklarasikan ketergantungan pada artefak `url-connection-client` Maven dalam file Anda. `pom.xml`

Berbeda dengan`ApacheHttpClient`, 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.27.21</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`
<a name="http-url-config"></a>

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](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.Builder.html) untuk mengonfigurasi properti untuk klien HTTP URLConnection berbasis.

### Praktik terbaik: mendedikasikan sebuah `UrlConnectionHttpClient` instance untuk klien layanan
<a name="http-config-url-one-client"></a>

Jika Anda perlu mengonfigurasi instance`UrlConnectionHttpClient`, 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](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/ProxyConfiguration.Builder.html)>`.

 **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
<a name="http-config-url-multi-clients"></a>

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 URLConnection berbasis 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();
```

#### Gunakan `URLConnectionHttpClient` dan `ApacheHttpClient` bersama-sama
<a name="http-config-url-caveat"></a>

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 or `httpClient()` `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 membuat`ApacheHttpClient`, Anda harus [menambahkan ketergantungan](http-configuration-apache.md#http-apache-dependency) pada `apache-client` artefak dalam file proyek Maven Anda.

## Contoh konfigurasi proxy
<a name="http-configuration-url-proxy-conf-ex"></a>

Cuplikan kode berikut menggunakan [pembangun konfigurasi proxy untuk klien HTTP koneksi URL](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/ProxyConfiguration.Builder.html).

```
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 URLConnection berbasis saat ini tidak mendukung properti sistem proxy HTTPS atau variabel lingkungan HTTPS\$1PROXY.