Envoi de SMS en C++ avec l'API de la bibliothèque libcurl

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi de SMS en C++ avec la bibliothèque libcurl



Dans le développement moderne, il est souvent nécessaire d'intégrer des services externes pour envoyer des SMS. En C++, cette tâche peut être résolue efficacement avec la bibliothèque libcurl — un outil puissant pour travailler avec les protocoles HTTP/HTTPS. La bibliothèque libcurl fournit une API simple et flexible pour effectuer des requêtes vers des services REST, y compris l'envoi de SMS via l'API des fournisseurs.



Qu'est-ce que libcurl ?



libcurl est une bibliothèque multiplateforme pour le transfert de données via divers protocoles (HTTP, HTTPS, FTP, SMTP et autres). Elle est largement utilisée dans les projets C++ grâce à sa stabilité, ses performances et sa documentation complète. Pour envoyer des SMS, nous aurons besoin de la fonctionnalité des requêtes HTTP POST avec transmission de données JSON ou encodées en URL.



Installation de libcurl



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/RHEL


Pour Windows, vous pouvez utiliser vcpkg ou télécharger des builds prêts à l'emploi depuis le site officiel curl.se.



Exemple de base : envoi de SMS via HTTP POST



Considérons l'envoi de SMS en utilisant l'API d'un service populaire (par exemple, Twilio, Nexmo ou un équivalent russe). Dans l'exemple ci-dessous, nous envoyons une requête POST avec des données JSON contenant le numéro du destinataire et le texte du message.



#include <iostream>#include <string>#include <curl/curl.h>

// Fonction de rappel 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& apiKey, const std::string& phone, const std::string& message) { CURL* curl; CURLcode res; std::string response; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if(curl) { // URL du point de terminaison API (remplacez par le vôtre) curl_easy_setopt(curl, CURLOPT_URL, "https://api.smsprovider.com/v1/send"); // En-têtes : type de contenu et autorisation struct curl_slist* headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); std::string authHeader = "Authorization: Bearer " + apiKey; headers = curl_slist_append(headers, authHeader.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // Construction du corps JSON de la requête std::string jsonData = "{"; jsonData += "\\"phone\\":\\"" + phone + "\\","; jsonData += "\\"message\\":\\"" + message + "\\""; jsonData += "}"; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); // Exécution de la requête res = curl_easy_perform(curl); // Vérification du résultat if(res != CURLE_OK) { std::cerr << "Erreur curl : " << curl_easy_strerror(res) << std::endl; curl_easy_cleanup(curl); curl_global_cleanup(); return false; } // Obtention du code HTTP de la réponse long httpCode; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode); curl_easy_cleanup(curl); curl_global_cleanup(); if(httpCode == 200 || httpCode == 201) { std::cout << "SMS envoyé avec succès. Réponse : " << response << std::endl; return true; } else { std::cerr << "Erreur du serveur. HTTP " << httpCode << " : " << response << std::endl;

Recommendations