SMS-Versand in C++: API-Bibliotheken libcurl und cpprestsdk
In der modernen C++-Entwicklung besteht häufig die Notwendigkeit der Integration mit externen Diensten, einschließlich des Versendens von SMS-Nachrichten. Obwohl die Standardbibliothek von C++ keine integrierten Mittel für die Arbeit mit HTTP-Anfragen bereitstellt, gibt es leistungsstarke Drittanbieter-Bibliotheken, die diese Aufgabe lösen. In diesem Artikel betrachten wir zwei beliebte Bibliotheken — libcurl (CURL) und cpprestsdk (Casablanca) — und zeigen, wie man mit ihrer Hilfe SMS über die API gängiger SMS-Anbieter versendet.
Warum wird eine Bibliothek zum SMS-Versand in C++ benötigt?
Das Versenden von SMS über C++ ist eine typische Aufgabe für Serveranwendungen, Überwachungssysteme, Benachrichtigungen oder Automatisierung. Die direkte Arbeit mit Sockets und dem HTTP-Protokoll in C++ ist komplex und fehleranfällig. Bibliotheken wie libcurl und cpprestsdk abstrahieren diese Komplexität und bieten eine benutzerfreundliche Schnittstelle zum Ausführen von HTTP-Anfragen (GET, POST, PUT) und zur Verarbeitung von JSON/XML-Antworten.
Wir werden die API eines SMS-Anbieters (z. B. Twilio, SMS.ru oder eines anderen, der eine REST-API unterstützt) verwenden. Ersetzen Sie in den folgenden Beispielen YOUR_API_KEY, YOUR_SENDER und YOUR_PHONE durch Ihre tatsächlichen Daten.
Bibliothek 1: libcurl (CURL)
libcurl ist eine bewährte Bibliothek für die Arbeit mit URLs, die zahlreiche Protokolle (HTTP, HTTPS, FTP usw.) unterstützt. Sie ist in C geschrieben, hat aber hervorragende C++-Bindings. Für die Verwendung in einem C++-Projekt genügt es, die Header-Datei curl/curl.h einzubinden und mit libcurl zu linken.
Installation von libcurl
- Linux (Ubuntu/Debian):
sudo apt-get install libcurl4-openssl-dev - Windows: Laden Sie vorkompilierte Binärdateien von der offiziellen Website herunter oder verwenden Sie vcpkg:
vcpkg install curl - macOS:
brew install curl
Beispiel für den SMS-Versand mit libcurl (C++-Syntax)
In diesem Beispiel verwenden wir eine einfache POST-Anfrage mit Daten im JSON-Format. Die Bibliothek libcurl verarbeitet die HTTP-Header und den Anfragetext.
#include <iostream>#include <string>#include <curl/curl.h>
// Callback-Funktion zum Aufzeichnen der Serverantwortsize_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"; // Ersetzen Sie durch die URL Ihres Anbieters 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 << "Curl-Fehler: " << curl_easy_strerror(res) << std::endl; return false; }
std::cout << "Serverantwort: " << response << std::endl; return true;}
int main() { curl_global_init(CURL_GLOBAL_DEF