

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

# Demo unduhan dasar CoreHTTP S3
<a name="core-http-s3-download-demo"></a>

**penting**  <a name="deprecation-message-demo"></a>
Demo ini di-host di repositori Amazon-Freertos yang tidak digunakan lagi. Kami menyarankan Anda [mulai di sini](freertos-getting-started-modular.md) ketika Anda membuat proyek baru. Jika Anda sudah memiliki proyek FreeRTOS yang sudah ada berdasarkan repositori Amazon-Freertos yang sekarang tidak digunakan lagi, lihat. [Panduan Migrasi Repositori Github Amazon-freertos](github-repo-migration.md)

## Pengantar
<a name="core-http-s3-download-demo-intro"></a>

Demo ini menunjukkan cara menggunakan [permintaan rentang](https://tools.ietf.org/html/rfc7233) untuk mengunduh file dari server HTTP Amazon S3. Permintaan rentang didukung secara native di CoreHTTP API saat Anda gunakan `HTTPClient_AddRangeHeader` untuk membuat permintaan HTTP. Untuk lingkungan mikrokontroler, permintaan jangkauan sangat dianjurkan. Dengan mengunduh file besar dalam rentang terpisah, alih-alih dalam satu permintaan, setiap bagian file dapat diproses tanpa memblokir soket jaringan. Permintaan jangkauan menurunkan risiko paket yang jatuh, yang memerlukan transmisi ulang pada koneksi TCP, sehingga meningkatkan konsumsi daya perangkat.

Contoh ini menggunakan [antarmuka transportasi jaringan](https://freertos.org/network-interface.html) yang menggunakan mBEDTLS untuk membuat koneksi yang saling diautentikasi antara klien perangkat IoT yang menjalankan CoreHTTP dan server HTTP Amazon S3.

**catatan**  
Untuk mengatur dan menjalankan demo FreeRTOS, ikuti langkah-langkahnya. [Memulai dengan FreeRTOS](freertos-getting-started.md)

### Berulir tunggal versus multi ulir
<a name="core-http-s3-download-demo-threads"></a>

Ada dua model penggunaan CoreHTTP, *single threaded dan *multithreaded** (multitasking). Meskipun demo di bagian ini menjalankan perpustakaan HTTP di utas, ini sebenarnya menunjukkan cara menggunakan CoreHTTP dalam satu lingkungan berulir (hanya satu tugas yang menggunakan API HTTP dalam demo). Meskipun aplikasi single threaded harus berulang kali memanggil perpustakaan HTTP, aplikasi multithreaded malah dapat mengirim permintaan HTTP di latar belakang dalam tugas agen (atau daemon).

## Organisasi kode sumber
<a name="core-http-s3-download-demo-source-code"></a>

Proyek demo diberi nama `http_demo_s3_download.c` dan dapat ditemukan di `freertos/demos/coreHTTP/` direktori dan di [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c)situs web. 

## Mengkonfigurasi koneksi server HTTP Amazon S3
<a name="core-http-s3-download-demo-configure-server"></a>

Demo ini menggunakan URL yang telah ditandatangani sebelumnya untuk terhubung ke server HTTP Amazon S3 dan mengotorisasi akses ke objek untuk diunduh. Koneksi TLS server HTTP Amazon S3 hanya menggunakan otentikasi server. Pada tingkat aplikasi, akses ke objek diautentikasi dengan parameter dalam kueri URL yang telah ditandatangani sebelumnya. Ikuti langkah-langkah di bawah ini untuk mengonfigurasi koneksi Anda AWS.

1. Siapkan AWS akun:

   1. Jika Anda belum melakukannya, [buat dan aktifkan AWS akun](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/).

   1. Akun dan izin ditetapkan menggunakan AWS Identity and Access Management (IAM). IAM memungkinkan Anda mengelola izin untuk setiap pengguna di akun Anda. Secara default, pengguna tidak memiliki izin sampai diberikan oleh pemilik root.

      1. Untuk menambahkan pengguna ke AWS akun Anda, lihat [Panduan Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

      1. Berikan izin ke AWS akun Anda untuk mengakses FreeRTOS AWS IoT dan dengan menambahkan kebijakan ini:
         + AmazonS3 FullAccess

1. Buat bucket di S3 dengan mengikuti langkah-langkah di [Bagaimana cara membuat Bucket S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html) di *Panduan Pengguna Konsol Layanan Penyimpanan Sederhana Amazon*.

1. Unggah file ke S3 dengan mengikuti langkah-langkah di [Bagaimana cara mengunggah file dan folder ke bucket S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) .

1. Hasilkan URL yang telah ditandatangani sebelumnya menggunakan skrip yang terletak di`FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py`. Untuk petunjuk penggunaan, lihat`FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md`. 

## Fungsionalitas
<a name="core-http-s3-download-demo-functionality"></a>

Demo mengambil ukuran file terlebih dahulu. Kemudian ia meminta setiap rentang byte secara berurutan, dalam satu lingkaran, dengan ukuran rentang. `democonfigRANGE_REQUEST_LENGTH`

Kode sumber untuk demo dapat ditemukan di situs [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c)web.

### Menghubungkan ke server HTTP Amazon S3
<a name="core-http-s3-download-demo-connecting"></a>

Fungsi [ connectToServerWithBackoffRetries()](https://github.com/aws/amazon-freertos/blob/main/demos/common/http_demo_helpers/http_demo_utils.c#L131-L170) mencoba untuk membuat koneksi TCP ke server HTTP. Jika koneksi gagal, ia mencoba lagi setelah batas waktu. Nilai batas waktu akan meningkat secara eksponensial hingga jumlah upaya maksimum tercapai atau nilai batas waktu maksimum tercapai. `connectToServerWithBackoffRetries()`mengembalikan status kegagalan jika koneksi TCP ke server tidak dapat dibuat setelah jumlah upaya yang dikonfigurasi. 

Fungsi ini `prvConnectToServer()` menunjukkan cara membuat koneksi ke server HTTP Amazon S3 hanya menggunakan otentikasi server. [Ini menggunakan antarmuka transport berbasis MBEDTLS yang diimplementasikan dalam file FreerTos- \$1mbedtls.c. Plus/Source/Application-Protocols/network\$1transport/freertos\$1plus\$1tcp/using\$1mbedtls/using](https://github.com/FreeRTOS/FreeRTOS/blob/202012.00/FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c) 

Kode sumber untuk `prvConnectToServer()` dapat ditemukan di [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L273-L333).

### Membuat permintaan rentang
<a name="core-http-s3-download-demo-creating-range-request"></a>

Fungsi API `HTTPClient_AddRangeHeader()` mendukung serialisasi rentang byte ke header permintaan HTTP untuk membentuk permintaan rentang. Rentang permintaan digunakan dalam demo ini untuk mengambil ukuran file dan untuk meminta setiap bagian dari file.

Fungsi `prvGetS3ObjectFileSize()` mengambil ukuran file di bucket S3. `Connection: keep-alive`Header ditambahkan dalam permintaan pertama ini ke Amazon S3 untuk menjaga koneksi tetap terbuka setelah respons dikirim. Server HTTP S3 saat ini tidak mendukung permintaan HEAD menggunakan URL yang telah ditandatangani sebelumnya, sehingga byte ke-0 diminta. Ukuran file terkandung dalam bidang `Content-Range` header respon. `206 Partial Content`Respons diharapkan dari server; kode status respons lain yang diterima adalah kesalahan.

Kode sumber untuk `prvGetS3ObjectFileSize()` dapat ditemukan di [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L337-L502).

Setelah mengambil ukuran file, demo ini membuat permintaan rentang baru untuk setiap rentang byte file yang akan diunduh. Ini digunakan `HTTPClient_AddRangeHeader()` untuk setiap bagian file. 

### Mengirim permintaan jangkauan dan menerima tanggapan
<a name="core-http-s3-download-demo-send-request"></a>

Fungsi `prvDownloadS3ObjectFile()` mengirimkan permintaan rentang dalam satu lingkaran hingga seluruh file diunduh. Fungsi API `HTTPClient_Send()` mengirimkan permintaan dan menerima respons secara sinkron. Ketika fungsi kembali, respon diterima dalam file`xResponse`. Kode status kemudian diverifikasi menjadi `206 Partial Content` dan jumlah byte yang diunduh sejauh ini ditambah dengan nilai header. `Content-Length` 

Kode sumber untuk `prvDownloadS3ObjectFile()` dapat ditemukan di [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L506-L651).