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
Importante
Questa demo è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di iniziare da qui quando crei un nuovo progetto. Se hai già un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. Guida alla migrazione del RTOS repository Github gratuito da Amazon
Introduzione
Questa demo mostra come utilizzare le richieste di intervalloHTTPClient_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
Nota
Per configurare ed eseguire le demo di FreerTOS, segui i passaggi indicati. Inizia con Free RTOS
Filettatura singola contro thread multiplo
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
Il progetto dimostrativo è denominato http_demo_s3_download.c
e può essere trovato nella
directory e sul GitHubfreertos
/demos/coreHTTP/
Configurazione della connessione al server HTTP Amazon S3
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
-
Configura un AWS account:
-
Se non l'hai già fatto, crea e attiva un AWS account
. -
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.
-
Per aggiungere un utente al tuo AWS account, consulta la IAM User Guide.
-
Concedi l'autorizzazione al tuo AWS account per accedere a FreerTOS aggiungendo queste AWS IoT politiche:
-
Amazon S3 FullAccess
-
-
-
-
Crea un bucket in S3 seguendo la procedura descritta in Come si crea un bucket S3? nella Guida per l'utente della console di Amazon Simple Storage Service.
-
Carica un file su S3 seguendo la procedura descritta in Come faccio a caricare file e cartelle in un bucket S3? .
-
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, vedereFreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md
.
Funzionalità
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
Connessione al server HTTP Amazon S3
La funzione connectToServerWithBackoffRetries ()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-Plus/source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c.
Il codice prvConnectToServer()
sorgente GitHub
Creazione di una richiesta di intervallo
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
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
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 unxResponse
. 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