使用 libcurl 库通过 C++ 发送短信

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

使用 libcurl 库通过 C++ 发送短信



在现代开发中,经常需要与外部服务集成以发送短信消息。在 C++ 中,可以使用 libcurl 库高效地解决此问题——这是一个用于处理 HTTP/HTTPS 协议的强大工具。libcurl 库提供了一个简单灵活的 API,用于向 REST 服务执行请求,包括通过提供商 API 发送短信。



什么是 libcurl?



libcurl 是一个跨平台的数据传输库,支持多种协议(HTTP、HTTPS、FTP、SMTP 等)。由于其稳定性、高性能和丰富的文档,它被广泛应用于 C++ 项目中。发送短信时,我们需要使用 HTTP POST 请求功能,传输 JSON 或 URL 编码的数据。



安装 libcurl



在大多数 Linux 发行版中,可以通过包管理器安装 libcurl:



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


对于 Windows,可以使用 vcpkg 或从 curl.se 官方网站下载预编译版本。



基本示例:通过 HTTP POST 发送短信



我们来看一个使用流行服务(例如 Twilio、Nexmo 或俄罗斯类似服务)API 发送短信的示例。下面的示例中,我们发送一个包含接收者号码和消息文本的 JSON 数据的 POST 请求。



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

// 用于记录服务器响应的回调函数static 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) { // API 端点 URL(请替换为您自己的) curl_easy_setopt(curl, CURLOPT_URL, "https://api.smsprovider.com/v1/send"); // 请求头:内容类型和授权 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); // 构建 JSON 请求体 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); // 执行请求 res = curl_easy_perform(curl); // 检查结果 if(res != CURLE_OK) { std::cerr << "curl 错误: " << curl_easy_strerror(res) << std::endl; curl_easy_cleanup(curl); curl_global_cleanup(); return false; } // 获取 HTTP 响应状态码 long httpCode; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpCode); curl_easy_cleanup(curl); curl_global_cleanup(); if(httpCode == 200 || httpCode == 201) { std::cout << "短信发送成功。响应: " << response << std::endl; return true; } else { std::cerr << "服务器错误。HTTP " << httpCode << ": " << response << std::endl;

推荐