Envío de SMS en C++ con la API de la biblioteca libcurl

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de SMS en C++ con la biblioteca libcurl



En el desarrollo moderno, a menudo se requiere la integración con servicios externos para enviar mensajes SMS. En C++, esta tarea se puede resolver eficientemente con la biblioteca libcurl, una potente herramienta para trabajar con los protocolos HTTP/HTTPS. La biblioteca libcurl proporciona una API simple y flexible para realizar solicitudes a servicios REST, incluyendo el envío de SMS a través de la API de proveedores.



¿Qué es libcurl?



libcurl es una biblioteca multiplataforma para la transferencia de datos a través de varios protocolos (HTTP, HTTPS, FTP, SMTP y otros). Se utiliza ampliamente en proyectos de C++ gracias a su estabilidad, rendimiento y extensa documentación. Para enviar SMS, necesitaremos la funcionalidad de solicitudes HTTP POST con transmisión de datos JSON o codificados en URL.



Instalación de libcurl



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


Para Windows, puede usar vcpkg o descargar compilaciones predefinidas desde el sitio oficial curl.se.



Ejemplo básico: envío de SMS mediante HTTP POST



Consideremos el envío de SMS utilizando la API de un servicio popular (por ejemplo, Twilio, Nexmo o un análogo ruso). En el siguiente ejemplo, enviamos una solicitud POST con datos JSON que contienen el número del destinatario y el texto del mensaje.



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

// Función de 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& 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 del endpoint de la API (reemplácelo por el suyo) curl_easy_setopt(curl, CURLOPT_URL, "https://api.smsprovider.com/v1/send"); // Encabezados: tipo de contenido y autorización 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); // Formamos el cuerpo JSON de la solicitud 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); // Ejecutamos la solicitud res = curl_easy_perform(curl); // Verificamos el resultado if(res != CURLE_OK) { std::cerr << "Error curl: " << curl_easy_strerror(res) << std::endl; curl_easy_cleanup(curl); curl_global_cleanup(); return false; } // Obtenemos el código HTTP de respuesta 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 enviado exitosamente. Respuesta: " << response << std::endl; return true; } else { std::cerr << "Error del servidor. HTTP " << httpCode << ": " << response << std::endl;

Recommendations