Envio de SMS em C++: Biblioteca API LibCurl e Requisições REST

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Envio de SMS em C++: Guia Completo para Uso da API com a Biblioteca LibCurl



O envio de mensagens SMS é uma das funções-chave de aplicações modernas: desde autenticação de dois fatores até notificações de status de pedido. No ecossistema C++ não existem meios integrados para trabalhar com gateways SMS, no entanto, com a ajuda da biblioteca universal libcurl e requisições HTTP padrão, é possível integrar facilmente qualquer API REST de provedor SMS. Neste artigo, vamos analisar como escrever uma função robusta para envio de SMS em C++ usando a biblioteca LibCurl e examinar exemplos típicos para serviços populares (Twilio, SMS Aero, Bytehand).



Por que LibCurl?

LibCurl é uma biblioteca multiplataforma para transferência de dados por vários protocolos (HTTP, HTTPS, FTP, etc.). Ela suporta:

  • Requisições GET, POST, PUT, DELETE
  • SSL/TLS (HTTPS)
  • Trabalho com cabeçalhos e corpo da requisição
  • Processamento de respostas do servidor

Para enviar SMS, basta executar uma requisição POST para a API do provedor escolhido, passando os parâmetros necessários (número de telefone, texto, chave da API). A LibCurl cuida de todo o trabalho de baixo nível com sockets e criptografia.



Instalação da Biblioteca

Na maioria das distribuições Linux, a LibCurl pode ser instalada através do gerenciador de pacotes:

sudo apt-get install libcurl4-openssl-dev  # Ubuntu/Debiansudo yum install libcurl-devel             # CentOS/RHEL

Para Windows, você pode baixar DLLs pré-compiladas do site oficial ou usar vcpkg:

vcpkg install curl

Inclusão no código:

#include <curl/curl.h>#include <string>#include <json/json.h>  // se usar JSON (nlohmann/json)


Estrutura Básica da Função SMS

Vamos criar uma função universal sendSms, que recebe a URL da API, chave, número do destinatário e texto da mensagem. Para trabalhar com JSON, é conveniente usar a biblioteca nlohmann/json (somente cabeçalho, não requer compilação).



#include <iostream>#include <string>#include <curl/curl.h>#include <nlohmann/json.hpp>

using json = nlohmann::json;

// Callback para gravar a resposta do 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;

// Monta o corpo JSON da requisição json payload; payload["phone"] = phone; payload["text"] = message; payload["api_key"] = apiKey;

std::string jsonStr = payload.dump();

// Configuração da requisição 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);

// Executa a requisição res = curl_easy_perform(curl);

// Limpeza curl_easy_cleanup(curl); curl_global_cleanup();

if(res != CURLE_OK) { std::cerr << "Erro curl: " << curl_easy_strerror(res) << std::endl; return false; }

// Analisa a resposta (exemplo para Twilio) try { json response = json::parse(readBuffer); if(response.co

Recommendations