Envoyer des données via HTTP à une API depuis le fichier main.cpp
Pour envoyer des données via HTTP à une API depuis le fichier main.cpp
, voici une approche que vous pouvez suivre en utilisant la bibliothèque libcurl
. Je vais vous guider à travers l'ajout de cette fonctionnalité dans votre projet.
Étapes à suivre
Installer
libcurl
(si ce n'est pas déjà fait) :Sous Linux :
sudo apt-get install libcurl4-openssl-dev
Sous Windows :
- Vous pouvez télécharger
libcurl
depuis le site officiel et l'intégrer à votre projet.
- Vous pouvez télécharger
Modifier
main.cpp
pour inclure l'envoi des données via HTTP :Ajoutez l'inclusion de la bibliothèque
libcurl
dansmain.hpp
:#include <curl/curl.h>
Dans votre fichier
main.cpp
, vous pouvez ajouter une fonction pour envoyer les données via une requête POST. Voici un exemple :#include "main.hpp" #include <iostream> #include <curl/curl.h> // Fonction pour envoyer les données à l'API via HTTP void sendDataToAPI(const std::string &url, const std::string &jsonData) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if(curl) { struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); res = curl_easy_perform(curl); if(res != CURLE_OK) { std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl; } curl_easy_cleanup(curl); } curl_global_cleanup(); } int main() { // Vos autres codes ici std::string apiUrl = "http://votre-api-endpoint.com/data"; std::string jsonData = "{\"key\":\"value\"}"; // Les données à envoyer // Appel de la fonction pour envoyer les données sendDataToAPI(apiUrl, jsonData); return 0; }
Compiler et lier avec
libcurl
:Pour compiler votre projet en utilisant
g++
(par exemple sous Linux) :g++ -o votre_programme main.cpp -lcurl
Explication
sendDataToAPI
: Cette fonction prend deux paramètres,url
pour l'endpoint de l'API etjsonData
pour les données que vous souhaitez envoyer. Elle utiliselibcurl
pour créer une requête HTTP POST et envoyer les données.CURL : C'est la bibliothèque qui permet de gérer les requêtes HTTP. Elle est initialisée avec
curl_global_init
et nettoyée aveccurl_global_cleanup
.Headers : Le header
"Content-Type: application/json"
est ajouté pour indiquer que les données envoyées sont au format JSON.Postfields : Les données JSON sont définies comme le corps de la requête POST.
Résultat attendu
Quand vous exécutez ce programme, il devrait envoyer une requête POST à l'API spécifiée avec les données fournies. Si la requête échoue, un message d'erreur sera affiché.
Si vous avez des questions supplémentaires ou si vous souhaitez des ajustements spécifiques, n'hésitez pas à demander !
Intégrer les données provenant de votre application C++ dans l'API FastAPI.
1. API FastAPI
Le code de l'API FastAPI que vous avez fourni est conçu pour recevoir des données de capteurs via une requête HTTP POST, les vérifier, et les enregistrer dans une base de données SQLite. Si des valeurs anormales sont détectées, une notification est envoyée.
2. Modification du Code C++
Pour envoyer les données à l'API, nous allons ajouter une méthode dans votre code C++ pour faire une requête HTTP POST. Pour cela, nous allons utiliser libcurl
, une bibliothèque populaire pour les requêtes HTTP en C++.
3. Structure du Projet C++
main.hpp
Vous n'avez peut-être pas besoin de modifier ce fichier si la logique actuelle ne nécessite pas d'implémentation spécifique pour les en-têtes.
main.cpp
Voici une version modifiée de main.cpp
pour inclure l'envoi des données via HTTP POST.
#include <iostream>
#include <string>
#include <curl/curl.h>
#include "main.hpp"
// Remplacez les valeurs par vos valeurs réelles
struct SensorData {
float water_level = 85.0;
float caustic_soda_level = 1.5;
float water_temperature = 50.0;
float caustic_soda_temperature = 60.0;
float voltage = 320.0;
};
std::string serializeSensorData(SensorData data) {
// Convertir les données en format JSON
std::string json = "{";
json += "\"water_level\":" + std::to_string(data.water_level) + ",";
json += "\"caustic_soda_level\":" + std::to_string(data.caustic_soda_level) + ",";
json += "\"water_temperature\":" + std::to_string(data.water_temperature) + ",";
json += "\"caustic_soda_temperature\":" + std::to_string(data.caustic_soda_temperature) + ",";
json += "\"voltage\":" + std::to_string(data.voltage);
json += "}";
return json;
}
void sendSensorData(SensorData data) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
std::string json_data = serializeSensorData(data);
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:8000/verifier");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data.c_str());
// Définir l'en-tête Content-Type
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
}
curl_easy_cleanup(curl);
}
}
int main() {
SensorData data;
// Exemple d'envoi de données
sendSensorData(data);
return 0;
}
4. Explication du Code
serializeSensorData
: Cette fonction convertit les données des capteurs en une chaîne JSON pour l'envoyer à l'API.sendSensorData
: Cette fonction utiliselibcurl
pour envoyer une requête POST à l'API FastAPI. Les données JSON sont envoyées en tant que payload.Libcurl : Si vous n'avez pas encore installé
libcurl
, vous pouvez l'installer sur Linux avecsudo apt-get install libcurl4-openssl-dev
ou sur Windows en téléchargeant la bibliothèque à partir du site officiel.
5. Compilation
Si vous utilisez g++, compilez votre code avec:
g++ main.cpp -o main -lcurl
6. Exécution de l'Application
Lancez votre API FastAPI avec:
uvicorn your_fastapi_file:app --reload
Ensuite, exécutez votre programme C++. Il enverra les données à l'API FastAPI, qui les vérifiera et les enregistrera dans la base de données.
7. Test et Déploiement
Testez votre application pour vérifier que les données sont bien envoyées et traitées. Vous pourrez ensuite adapter ce code selon vos besoins spécifiques et déployer votre API sur un serveur si nécessaire.