Envío de SMS en C++: API de las bibliotecas libcurl y cpprestsdk
En el desarrollo moderno con C++, a menudo surge la necesidad de integrarse con servicios externos, incluido el envío de mensajes SMS. A pesar de que la biblioteca estándar de C++ no proporciona herramientas integradas para trabajar con solicitudes HTTP, existen potentes bibliotecas de terceros que resuelven esta tarea. En este artículo, analizaremos dos bibliotecas populares: libcurl (CURL) y cpprestsdk (Casablanca), y mostraremos cómo enviar SMS a través de la API de proveedores de SMS populares utilizando estas herramientas.
¿Por qué se necesita una biblioteca para enviar SMS en C++?
El envío de SMS a través de C++ es una tarea típica para aplicaciones de servidor, sistemas de monitoreo, notificaciones o automatización. El trabajo directo con sockets y el protocolo HTTP en C++ es complejo y propenso a errores. Bibliotecas como libcurl y cpprestsdk abstraen esta complejidad, proporcionando una interfaz conveniente para realizar solicitudes HTTP (GET, POST, PUT) y procesar respuestas JSON/XML.
Usaremos la API de un proveedor de SMS (por ejemplo, Twilio, SMS.ru o cualquier otro que admita REST API). En los ejemplos a continuación, reemplace YOUR_API_KEY, YOUR_SENDER y YOUR_PHONE con sus datos reales.
Biblioteca 1: libcurl (CURL)
libcurl es una biblioteca probada a lo largo del tiempo para trabajar con URL, que admite múltiples protocolos (HTTP, HTTPS, FTP, etc.). Está escrita en C, pero tiene excelentes enlaces para C++. Para usarla en un proyecto de C++, basta con incluir el archivo de encabezado curl/curl.h y enlazar con libcurl.
Instalación de libcurl
- Linux (Ubuntu/Debian):
sudo apt-get install libcurl4-openssl-dev - Windows: descargue los archivos binarios precompilados desde el sitio oficial o use vcpkg:
vcpkg install curl - macOS:
brew install curl
Ejemplo de envío de SMS a través de libcurl (sintaxis C++)
En este ejemplo, usamos una solicitud POST simple con datos en formato JSON. La biblioteca libcurl maneja los encabezados HTTP y el cuerpo de la solicitud.
#include <iostream>#include <string>#include <curl/curl.h>
// Función de devolución de llamada para escribir la respuesta del servidorsize_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"; // Reemplace con la URL de su proveedor 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 << "Error de curl: " << curl_easy_strerror(res) << std::endl; return false; }
std::cout << "Respuesta del servidor: " << response << std::endl; return true;}
int main() { curl_global_init(CURL_GLOBAL_DEF También en la biblioteca
Autorización y autenticación en Rust: guía completa
Trabajo con CSV en Rust: bibliotecas csv, serde y procesamiento eficiente de datos
CMake para C++: guía completa con ejemplos
Mocha para JavaScript (Node.js): guía completa con ejemplos