Envio de SMS em C++ usando a biblioteca API libcurl

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++ usando a biblioteca libcurl



No desenvolvimento moderno, é frequente a necessidade de integração com serviços externos para envio de mensagens SMS. Em C++, essa tarefa pode ser resolvida eficientemente com a biblioteca libcurl — uma ferramenta poderosa para trabalhar com protocolos HTTP/HTTPS. A biblioteca libcurl fornece uma API simples e flexível para realizar requisições a serviços REST, incluindo o envio de SMS através da API de provedores.



O que é libcurl?



libcurl é uma biblioteca multiplataforma para transferência de dados por vários protocolos (HTTP, HTTPS, FTP, SMTP e outros). Ela é amplamente utilizada em projetos C++ devido à sua estabilidade, desempenho e documentação extensa. Para enviar SMS, precisaremos da funcionalidade de requisições HTTP POST com transmissão de dados JSON ou codificados em URL.



Instalação do libcurl



Na maioria das distribuições Linux, o libcurl pode ser instalado 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 usar vcpkg ou baixar compilações prontas do site oficial curl.se.



Exemplo básico: envio de SMS via HTTP POST



Vamos considerar o envio de SMS usando a API de um serviço popular (por exemplo, Twilio, Nexmo ou um similar brasileiro). No exemplo abaixo, enviamos uma requisição POST com dados JSON contendo o número do destinatário e o texto da mensagem.



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

// Função de 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& 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 do endpoint da API (substitua pelo seu) curl_easy_setopt(curl, CURLOPT_URL, "https://api.smsprovider.com/v1/send"); // Cabeçalhos: tipo de conteúdo e autorização 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); // Monta o corpo JSON da requisição 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); // Executa a requisição res = curl_easy_perform(curl); // Verifica o resultado if(res != CURLE_OK) { std::cerr << "Erro curl: " << curl_easy_strerror(res) << std::endl; curl_easy_cleanup(curl); curl_global_cleanup(); return false; } // Obtém o código HTTP da resposta 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 com sucesso. Resposta: " << response << std::endl; return true; } else { std::cerr << "Erro do servidor. HTTP " << httpCode << ": " << response << std::endl;

Recommendations