

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

# Konfigurasikan klien HTTP berbasis Apache
<a name="http-configuration-apache"></a>

Klien layanan sinkron dalam AWS SDK for Java 2.x menggunakan klien HTTP berbasis Apache, secara default. [ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html) SDK `ApacheHttpClient` didasarkan pada [HttpClient](https://hc.apache.org/httpcomponents-client-4.5.x/index.html)Apache.

SDK juga menawarkan [UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html), yang memuat lebih cepat, tetapi memiliki lebih sedikit fitur. Untuk informasi tentang mengonfigurasi`UrlConnectionHttpClient`, lihat[Konfigurasikan klien HTTP URLConnection berbasis](http-configuration-url.md). 

Untuk melihat set lengkap opsi konfigurasi yang tersedia untuk Anda`ApacheHttpClient`, lihat [ApacheHttpClient.Builder dan [ProxyConfiguration.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ProxyConfiguration.Builder.html)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html).

## Akses `ApacheHttpClient`
<a name="http-apache-dependency"></a>

Dalam kebanyakan situasi, Anda menggunakan `ApacheHttpClient` tanpa konfigurasi eksplisit. Anda mendeklarasikan klien layanan Anda dan SDK akan mengkonfigurasi `ApacheHttpClient` dengan nilai standar untuk Anda.

Jika Anda ingin mengkonfigurasi `ApacheHttpClient` atau menggunakannya secara eksplisit dengan beberapa klien layanan, Anda harus membuatnya tersedia untuk konfigurasi.

### Tidak diperlukan konfigurasi
<a name="http-config-apache-no-config"></a>

*Saat Anda mendeklarasikan dependensi pada klien layanan di Maven, SDK menambahkan dependensi runtime pada artefak.* `apache-client` Ini membuat `ApacheHttpClient` kelas tersedia untuk kode Anda saat runtime, tetapi tidak pada waktu kompilasi. Jika Anda tidak mengonfigurasi klien HTTP berbasis Apache, Anda tidak perlu menentukan ketergantungan untuk itu.

Dalam cuplikan XHTML berikut dari `pom.xml` file Maven, dependensi yang dideklarasikan dengan `<artifactId>s3</artifactId>` secara otomatis membawa klien HTTP berbasis Apache. Anda tidak perlu mendeklarasikan ketergantungan khusus untuk itu.

```
<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>
<dependencies>
    <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient-->
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
</dependencies>
```

Dengan dependensi ini, Anda tidak dapat membuat perubahan konfigurasi HTTP eksplisit, karena `ApacheHttpClient` pustaka hanya ada di classpath runtime. 

### Konfigurasi diperlukan
<a name="http-config-apache-yes-config"></a>

Untuk mengkonfigurasi`ApacheHttpClient`, Anda perlu menambahkan ketergantungan pada `apache-client` perpustakaan pada waktu *kompilasi*. 

Lihat contoh berikut dari file Maven untuk mengkonfigurasi `pom.xml` file. `ApacheHttpClient`

```
    <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>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
        </dependency>
        <!-- By adding the apache-client dependency, ApacheHttpClient will be added to 
             the compile classpath so you can configure it. -->
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>apache-client</artifactId>
        </dependency>
    </dependencies>
```

## Gunakan dan konfigurasikan `ApacheHttpClient`
<a name="http-apache-config"></a>

Anda dapat mengonfigurasi instance `ApacheHttpClient` bersama dengan membangun klien layanan, atau Anda dapat mengonfigurasi satu instance untuk dibagikan di beberapa klien layanan. 

Dengan salah satu pendekatan, Anda menggunakan `[ApacheHttpClient.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html)` untuk mengkonfigurasi properti untuk klien HTTP berbasis Apache.

### Praktik terbaik: mendedikasikan sebuah `ApacheHttpClient` instance untuk klien layanan
<a name="http-config-apache-recomm"></a>

Jika Anda perlu mengonfigurasi instance`ApacheHttpClient`, kami sarankan Anda membuat `ApacheHttpClient` 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 `ApacheHttpClient` instance tidak ditutup saat tidak lagi diperlukan.

Contoh berikut membuat `S3Client` dan mengkonfigurasi instance tertanam `ApacheHttpClient` dengan `maxConnections` dan `connectionTimeout` nilai-nilai. Contoh HTTP dibuat menggunakan `httpClientBuilder` metode`S3Client.Builder`.

 **Impor** 

```
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
```

 **Kode** 

```
S3Client s3Client = S3Client   // Singleton: Use the s3Client for all requests.
    .builder()
    .httpClientBuilder(ApacheHttpClient.builder()
        .maxConnections(100)
        .connectionTimeout(Duration.ofSeconds(5))
    ).build();

// Perform work with the s3Client.

s3Client.close();   // Requests completed: Close all service clients.
```

### Pendekatan alternatif: bagikan `ApacheHttpClient` contoh
<a name="http-config-apache-alt"></a>

Untuk membantu menjaga penggunaan sumber daya dan memori lebih rendah untuk aplikasi Anda, Anda dapat mengonfigurasi `ApacheHttpClient` dan membagikannya di beberapa klien layanan. Kumpulan koneksi HTTP akan dibagikan, yang menurunkan penggunaan sumber daya.

**catatan**  
Ketika sebuah `ApacheHttpClient` 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 Apache yang digunakan oleh dua klien layanan. `ApacheHttpClient`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.http.SdkHttpClient;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.s3.S3Client;
```

 **Kode** 

```
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder()
        .maxConnections(100).build();

// Singletons: Use the s3Client and dynamoDbClient for all requests.
S3Client s3Client = 
    S3Client.builder()
            .httpClient(apacheHttpClient).build();

DynamoDbClient dynamoDbClient = 
    DynamoDbClient.builder()
                  .httpClient(apacheHttpClient).build();

// Perform work with the s3Client and dynamoDbClient.

// Requests completed: Close all service clients.
s3Client.close();
dynamoDbClient.close();
apacheHttpClient.close();  // Explicitly close apacheHttpClient.
```

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

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

```
SdkHttpClient apacheHttpClient = ApacheHttpClient.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 = ApacheHttpClient.builder()
                .proxyConfiguration(ProxyConfiguration.builder()
                        .useSystemPropertyValues(Boolean.FALSE)
                        .build())
                .build();

// Run the application.
// $ java -cp ... App
```

**catatan**  
Klien HTTP Apache saat ini tidak mendukung properti sistem proxy HTTPS atau variabel lingkungan HTTPS\$1PROXY.