

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à.

# Scarica la demo di CoreHTTP basic S3
<a name="core-http-s3-download-demo"></a>

**Importante**  <a name="deprecation-message-demo"></a>
Questa demo è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di [iniziare da qui quando crei un nuovo progetto](freertos-getting-started-modular.md). Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. [Guida alla migrazione del repository Github di Amazon-FreeRTOS](github-repo-migration.md)

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

Questa demo mostra come utilizzare [le richieste di intervallo](https://tools.ietf.org/html/rfc7233) per scaricare file dal server HTTP Amazon S3. Le richieste di intervallo sono supportate nativamente nell'API CoreHTTP quando vengono utilizzate `HTTPClient_AddRangeHeader` per creare la richiesta HTTP. Per un ambiente con microcontrollore, le richieste di intervallo sono altamente consigliate. Scaricando un file di grandi dimensioni in intervalli separati, anziché in una singola richiesta, ogni sezione del file può essere elaborata senza bloccare il socket di rete. Le richieste di intervallo riducono il rischio di perdita di pacchetti, il che richiede ritrasmissioni sulla connessione TCP, e quindi migliorano il consumo energetico del dispositivo.

Questo esempio utilizza un'[interfaccia di trasporto di rete](https://freertos.org/network-interface.html) che utilizza mbedTLS per stabilire una connessione reciprocamente autenticata tra un client di dispositivo IoT che esegue CoreHTTP e il server HTTP Amazon S3.

**Nota**  
Per configurare ed eseguire le demo di FreerTOS, segui i passaggi indicati. [Inizia con FreerTOS](freertos-getting-started.md)

### Filettatura singola contro filettatura multipla
<a name="core-http-s3-download-demo-threads"></a>

*Esistono due modelli di utilizzo CoreHTTP, a *thread singolo e multithread* (multitasking).* Sebbene la demo in questa sezione esegua la libreria HTTP in un thread, in realtà dimostra come utilizzare CoreHTTP in un ambiente a thread singolo (solo un'attività utilizza l'API HTTP nella demo). Sebbene le applicazioni a thread singolo debbano chiamare ripetutamente la libreria HTTP, le applicazioni multithread possono invece inviare richieste HTTP in background all'interno di un'attività agente (o daemon).

## Organizzazione del codice sorgente
<a name="core-http-s3-download-demo-source-code"></a>

Il progetto dimostrativo è denominato `http_demo_s3_download.c` e può essere trovato nella `freertos/demos/coreHTTP/` directory e sul [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c)sito Web. 

## Configurazione della connessione al server HTTP Amazon S3
<a name="core-http-s3-download-demo-configure-server"></a>

Questa demo utilizza un URL prefirmato per connettersi al server HTTP Amazon S3 e autorizzare l'accesso all'oggetto da scaricare. La connessione TLS del server HTTP Amazon S3 utilizza solo l'autenticazione del server. A livello di applicazione, l'accesso all'oggetto viene autenticato con i parametri della query URL prefirmata. Segui i passaggi seguenti per configurare la connessione a. AWS

1. Configura un AWS account:

   1. Se non l'hai già fatto, [crea e attiva un AWS account](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/).

   1. Gli account e le autorizzazioni vengono impostati utilizzando AWS Identity and Access Management (IAM). IAM ti consente di gestire le autorizzazioni per ogni utente del tuo account. Per impostazione predefinita, un utente non dispone delle autorizzazioni fino a quando non le concede il proprietario principale.

      1. Per aggiungere un utente al tuo AWS account, consulta la [IAM User Guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

      1. Concedi l'autorizzazione al tuo AWS account per accedere a FreerTOS aggiungendo queste AWS IoT politiche:
         + Amazon S3 FullAccess

1. Crea un bucket in S3 seguendo la procedura descritta in [Come si crea un bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)? nella *Guida per l'utente della console di Amazon Simple Storage Service*.

1. Carica un file su S3 seguendo la procedura descritta in [Come faccio a caricare file e cartelle in un bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html)? .

1. Genera un URL prefirmato utilizzando lo script che si trova in`FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py`. Per istruzioni d'uso, vedere`FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md`. 

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

La demo recupera innanzitutto la dimensione del file. Quindi richiede ogni intervallo di byte in sequenza, in un ciclo, con dimensioni dell'intervallo di. `democonfigRANGE_REQUEST_LENGTH`

Il codice sorgente per la demo è disponibile sul sito Web. [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c)

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

La funzione [ connectToServerWithBackoffRetries()](https://github.com/aws/amazon-freertos/blob/main/demos/common/http_demo_helpers/http_demo_utils.c#L131-L170) tenta di stabilire una connessione TCP al server HTTP. Se la connessione fallisce, riprova dopo un timeout. Il valore di timeout aumenterà in modo esponenziale fino al raggiungimento del numero massimo di tentativi o al raggiungimento del valore di timeout massimo. `connectToServerWithBackoffRetries()`restituisce uno stato di errore se la connessione TCP al server non può essere stabilita dopo il numero di tentativi configurato. 

La funzione `prvConnectToServer()` dimostra come stabilire una connessione al server HTTP Amazon S3 utilizzando solo l'autenticazione del server. [Utilizza l'interfaccia di trasporto basata su MbeDTLS implementata nel 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) 

Il codice `prvConnectToServer()` sorgente [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L273-L333)di è disponibile su.

### Creazione di una richiesta di intervallo
<a name="core-http-s3-download-demo-creating-range-request"></a>

La funzione API `HTTPClient_AddRangeHeader()` supporta la serializzazione di un intervallo di byte nelle intestazioni della richiesta HTTP per formare una richiesta di intervallo. Le richieste di intervallo vengono utilizzate in questa demo per recuperare la dimensione del file e per richiedere ogni sezione del file.

La funzione `prvGetS3ObjectFileSize()` recupera la dimensione del file nel bucket S3. L'`Connection: keep-alive`intestazione viene aggiunta in questa prima richiesta ad Amazon S3 per mantenere aperta la connessione dopo l'invio della risposta. Il server HTTP S3 attualmente non supporta le richieste HEAD che utilizzano un URL prefirmato, quindi è richiesto il byte 0. La dimensione del file è contenuta nel campo di intestazione della risposta. `Content-Range` È prevista una `206 Partial Content` risposta dal server; qualsiasi altro codice di stato della risposta ricevuto è un errore.

Il codice sorgente di `prvGetS3ObjectFileSize()` è disponibile su. [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L337-L502)

Dopo aver recuperato la dimensione del file, questa demo crea una nuova richiesta di intervallo per ogni intervallo di byte del file da scaricare. Viene utilizzato `HTTPClient_AddRangeHeader()` per ogni sezione del file. 

### Invio di richieste di intervallo e ricezione di risposte
<a name="core-http-s3-download-demo-send-request"></a>

La funzione `prvDownloadS3ObjectFile()` invia le richieste di intervallo in un ciclo fino al download dell'intero file. La funzione API `HTTPClient_Send()` invia una richiesta e riceve la risposta in modo sincrono. Quando la funzione ritorna, la risposta viene ricevuta in un`xResponse`. Viene quindi verificato che il codice di stato sia valido `206 Partial Content` e il numero di byte scaricati finora viene incrementato del valore dell'intestazione. `Content-Length` 

Il codice sorgente di è disponibile su. `prvDownloadS3ObjectFile()` [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L506-L651)