Envío de SMS en C++: Guía completa para usar la API con la biblioteca LibCurl
El envío de mensajes SMS es una de las funciones clave de las aplicaciones modernas: desde la autenticación de dos factores hasta las notificaciones de estado de pedidos. En el ecosistema de C++ no existen herramientas integradas para trabajar con pasarelas SMS, sin embargo, con la ayuda de la biblioteca universal libcurl y las solicitudes HTTP estándar, se puede integrar fácilmente cualquier API REST de un proveedor de SMS. En este artículo, analizaremos cómo escribir una función robusta para enviar SMS en C++ usando la biblioteca LibCurl, y veremos ejemplos típicos para servicios populares (Twilio, SMS Aero, Bytehand).
¿Por qué LibCurl?
LibCurl es una biblioteca multiplataforma para la transferencia de datos a través de varios protocolos (HTTP, HTTPS, FTP, etc.). Soporta:
- Solicitudes GET, POST, PUT, DELETE
- SSL/TLS (HTTPS)
- Trabajo con encabezados y cuerpo de la solicitud
- Procesamiento de respuestas del servidor
Para enviar SMS, basta con realizar una solicitud POST a la API del proveedor seleccionado, pasando los parámetros necesarios (número de teléfono, texto, clave API). LibCurl se encarga de todo el trabajo de bajo nivel con sockets y cifrado.
Instalación de la biblioteca
En la mayoría de las distribuciones de Linux, LibCurl se puede instalar a través del gestor de paquetes:
sudo apt-get install libcurl4-openssl-dev # Ubuntu/Debiansudo yum install libcurl-devel # CentOS/RHELPara Windows, puede descargar las DLL precompiladas desde el sitio oficial o usar vcpkg:
vcpkg install curlInclusión en el código:
#include <curl/curl.h>#include <string>#include <json/json.h> // si usa JSON (nlohmann/json)Estructura básica de la función SMS
Crearemos una función universal sendSms que recibe la URL de la API, la clave, el número de destinatario y el texto del mensaje. Para trabajar con JSON, es conveniente usar la biblioteca nlohmann/json (solo cabecera, no requiere compilación).
#include <iostream>#include <string>#include <curl/curl.h>#include <nlohmann/json.hpp>
using json = nlohmann::json;
// Callback para escribir la respuesta del servidorstatic 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;
// Formamos el cuerpo JSON de la solicitud json payload; payload["phone"] = phone; payload["text"] = message; payload["api_key"] = apiKey;
std::string jsonStr = payload.dump();
// Configuración de la solicitud 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);
// Ejecutamos la solicitud res = curl_easy_perform(curl);
// Limpieza curl_easy_cleanup(curl); curl_global_cleanup();
if(res != CURLE_OK) { std::cerr << "Error curl: " << curl_easy_strerror(res) << std::endl; return false; }
// Parseamos la respuesta (ejemplo para Twilio) try { json response = json::parse(readBuffer); if(response.co También en la biblioteca
Monitoreo de aplicaciones Java: herramientas y bibliotecas para la recopilación de métricas
Generación de PDF en C++: revisión de bibliotecas y herramientas
Colas de tareas en Java: desde ThreadPoolExecutor hasta Disruptor
Chucker Kotlin: guía completa con ejemplos prácticos
Tokens JWT en Java: Guía completa para trabajar con JSON Web Tokens