Envoi de SMS en C++ : API des bibliothèques libcurl et cpprestsdk
Dans le développement moderne en C++, il est souvent nécessaire d'intégrer des services externes, y compris l'envoi de messages SMS. Bien que la bibliothèque standard C++ ne fournisse pas de moyens intégrés pour travailler avec les requêtes HTTP, il existe de puissantes bibliothèques tierces qui résolvent ce problème. Dans cet article, nous examinerons deux bibliothèques populaires — libcurl (CURL) et cpprestsdk (Casablanca) — et montrerons comment les utiliser pour envoyer des SMS via l'API de fournisseurs de SMS courants.
Pourquoi une bibliothèque pour envoyer des SMS en C++ ?
L'envoi de SMS via C++ est une tâche typique pour les applications serveur, les systèmes de surveillance, de notification ou d'automatisation. Travailler directement avec les sockets et le protocole HTTP en C++ est complexe et sujet aux erreurs. Des bibliothèques comme libcurl et cpprestsdk abstraient cette complexité en offrant une interface pratique pour effectuer des requêtes HTTP (GET, POST, PUT) et traiter les réponses JSON/XML.
Nous utiliserons l'API d'un fournisseur de SMS (par exemple, Twilio, SMS.ru ou tout autre supportant une API REST). Dans les exemples ci-dessous, remplacez YOUR_API_KEY, YOUR_SENDER et YOUR_PHONE par vos données réelles.
Bibliothèque 1 : libcurl (CURL)
libcurl est une bibliothèque éprouvée pour travailler avec les URL, supportant de nombreux protocoles (HTTP, HTTPS, FTP, etc.). Elle est écrite en C, mais dispose d'excellents bindings C++. Pour l'utiliser dans un projet C++, il suffit d'inclure le fichier d'en-tête curl/curl.h et de lier avec libcurl.
Installation de libcurl
- Linux (Ubuntu/Debian) :
sudo apt-get install libcurl4-openssl-dev - Windows : téléchargez les binaires précompilés depuis le site officiel ou utilisez vcpkg :
vcpkg install curl - macOS :
brew install curl
Exemple d'envoi de SMS via libcurl (syntaxe C++)
Dans cet exemple, nous utilisons une simple requête POST avec des données au format JSON. La bibliothèque libcurl gère les en-têtes HTTP et le corps de la requête.
#include <iostream>#include <string>#include <curl/curl.h>
// Fonction de rappel pour écrire la réponse du serveursize_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t totalSize = size * nmemb; output->append((char*)contents, totalSize); return totalSize;}
bool sendSMS_via_libcurl(const std::string& phone, const std::string& message) { CURL* curl = curl_easy_init(); if (!curl) return false;
std::string response; std::string url = "https://api.sms-provider.com/v1/send"; // Remplacez par l'URL de votre fournisseur std::string jsonData = R"({ "api_key": "YOUR_API_KEY", "sender": "YOUR_SENDER", "phone": ")" + phone + R"(", "text": ")" + message + R"(" })";
struct curl_slist* headers = nullptr; headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
CURLcode res = curl_easy_perform(curl); curl_slist_free_all(headers); curl_easy_cleanup(curl);
if (res != CURLE_OK) { std::cerr << "Erreur curl : " << curl_easy_strerror(res) << std::endl; return false; }
std::cout << "Réponse du serveur : " << response << std::endl; return true;}
int main() { curl_global_init(CURL_GLOBAL_DEF