Envoi de SMS en C++ : Guide complet d'utilisation de l'API avec la bibliothèque LibCurl
L'envoi de messages SMS est l'une des fonctions clés des applications modernes : de l'authentification à deux facteurs aux notifications de statut de commande. Dans l'écosystème C++, il n'existe pas d'outils intégrés pour travailler avec les passerelles SMS, mais grâce à la bibliothèque universelle libcurl et aux requêtes HTTP standard, il est facile d'intégrer n'importe quelle API REST d'un fournisseur SMS. Dans cet article, nous allons voir comment écrire une fonction fiable pour envoyer des SMS en C++ en utilisant la bibliothèque LibCurl, et examiner des exemples typiques pour les services populaires (Twilio, SMS Aero, Bytehand).
Pourquoi LibCurl ?
LibCurl est une bibliothèque multiplateforme pour le transfert de données via divers protocoles (HTTP, HTTPS, FTP, etc.). Elle prend en charge :
- Les requêtes GET, POST, PUT, DELETE
- SSL/TLS (HTTPS)
- Le travail avec les en-têtes et le corps de la requête
- Le traitement des réponses du serveur
Pour envoyer un SMS, il suffit d'effectuer une requête POST vers l'API du fournisseur choisi, en transmettant les paramètres nécessaires (numéro de téléphone, texte, clé API). LibCurl gère tout le travail de bas niveau avec les sockets et le chiffrement.
Installation de la bibliothèque
Dans la plupart des distributions Linux, LibCurl peut être installé via le gestionnaire de paquets :
sudo apt-get install libcurl4-openssl-dev # Ubuntu/Debiansudo yum install libcurl-devel # CentOS/RHELPour Windows, vous pouvez télécharger les DLL pré-compilées depuis le site officiel ou utiliser vcpkg :
vcpkg install curlInclusion dans le code :
#include <curl/curl.h>#include <string>#include <json/json.h> // si vous utilisez JSON (nlohmann/json)Structure de base de la fonction SMS
Créons une fonction universelle sendSms qui prend l'URL de l'API, la clé, le numéro du destinataire et le texte du message. Pour travailler avec JSON, il est pratique d'utiliser la bibliothèque nlohmann/json (header-only, pas besoin de compilation).
#include <iostream>#include <string>#include <curl/curl.h>#include <nlohmann/json.hpp>
using json = nlohmann::json;
// Callback pour écrire la réponse du serveurstatic size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) { ((std::string*)userp)->append((char*)contents, size * nmemb); return size * nmemb;}
bool sendSms(const std::string& url, const std::string& apiKey, const std::string& phone, const std::string& message) { CURL *curl; CURLcode res; std::string readBuffer;
curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();
if(!curl) return false;
// Formation du corps JSON de la requête json payload; payload["phone"] = phone; payload["text"] = message; payload["api_key"] = apiKey;
std::string jsonStr = payload.dump();
// Configuration de la requête HTTP struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "Accept: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonStr.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
// Exécution de la requête res = curl_easy_perform(curl);
// Nettoyage curl_easy_cleanup(curl); curl_global_cleanup();
if(res != CURLE_OK) { std::cerr << "Erreur curl : " << curl_easy_strerror(res) << std::endl; return false; }
// Analyse de la réponse (exemple pour Twilio) try { json response = json::parse(readBuffer); if(response.co Aussi dans la bibliothèque
Configuration des applications Swift (iOS/macOS) : bibliothèques et outils
Travailler avec Kafka en Rust : les bibliothèques rdkafka et Franz
Polars pour Rust : guide complet avec exemples
Tests en Swift (iOS/macOS) : frameworks et outils
ORM pour Kotlin : comparaison et exemples (Exposed, Ktorm, Hibernate)