Envio de SMS em C++: API das bibliotecas libcurl e cpprestsdk
No desenvolvimento moderno em C++, surge frequentemente a necessidade de integração com serviços externos, incluindo o envio de mensagens SMS. Embora a biblioteca padrão do C++ não forneça meios nativos para trabalhar com requisições HTTP, existem poderosas bibliotecas de terceiros que resolvem essa tarefa. Neste artigo, abordaremos duas bibliotecas populares — libcurl (CURL) e cpprestsdk (Casablanca) — e mostraremos como enviar SMS através da API de provedores populares de SMS usando-as.
Por que uma biblioteca para envio de SMS em C++ é necessária?
Enviar SMS via C++ é uma tarefa típica para aplicações servidoras, sistemas de monitoramento, notificações ou automação. Trabalhar diretamente com sockets e o protocolo HTTP em C++ é complexo e propenso a erros. Bibliotecas como libcurl e cpprestsdk abstraem essa complexidade, fornecendo uma interface conveniente para executar requisições HTTP (GET, POST, PUT) e processar respostas JSON/XML.
Usaremos a API de um provedor de SMS (por exemplo, Twilio, SMS.ru ou qualquer outro que suporte REST API). Nos exemplos abaixo, substitua YOUR_API_KEY, YOUR_SENDER e YOUR_PHONE pelos seus dados reais.
Biblioteca 1: libcurl (CURL)
libcurl é uma biblioteca testada pelo tempo para trabalhar com URLs, suportando vários protocolos (HTTP, HTTPS, FTP, etc.). Ela é escrita em C, mas possui excelentes bindings para C++. Para usar em um projeto C++, basta incluir o arquivo de cabeçalho curl/curl.h e fazer a ligação com libcurl.
Instalação do libcurl
- Linux (Ubuntu/Debian):
sudo apt-get install libcurl4-openssl-dev - Windows: baixe os binários pré-compilados do site oficial ou use vcpkg:
vcpkg install curl - macOS:
brew install curl
Exemplo de envio de SMS via libcurl (sintaxe C++)
Neste exemplo, usamos uma requisição POST simples com dados no formato JSON. A biblioteca libcurl lida com os cabeçalhos HTTP e o corpo da requisição.
#include <iostream>#include <string>#include <curl/curl.h>
// Função de callback para escrever a resposta do 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"; // Substitua pela URL do seu provedor 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 << "Erro curl: " << curl_easy_strerror(res) << std::endl; return false; }
std::cout << "Resposta do servidor: " << response << std::endl; return true;}
int main() { curl_global_init(CURL_GLOBAL_DEF Também na biblioteca
Internacionalização (i18n) em TypeScript: guia completo
Cliente OAuth para Node.js: implementação de autorização via Google e GitHub
GORM para Go: guia completo com exemplos
Timber para Kotlin: guia completo com exemplos práticos
Trabalhando com Excel em Kotlin: bibliotecas Apache POI e Apache POI para Kotlin