Отправка SMS на C++: API библиотеки libcurl и cpprestsdk
В современной разработке на C++ часто возникает необходимость интеграции с внешними сервисами, включая отправку SMS-сообщений. Несмотря на то, что стандартная библиотека C++ не предоставляет встроенных средств для работы с HTTP-запросами, существуют мощные сторонние библиотеки, которые решают эту задачу. В данной статье мы рассмотрим две популярные библиотеки — libcurl (CURL) и cpprestsdk (Casablanca) — и покажем, как с их помощью отправлять SMS через API популярных SMS-провайдеров.
Зачем нужна библиотека для отправки SMS на C++?
Отправка SMS через C++ — это типичная задача для серверных приложений, систем мониторинга, уведомлений или автоматизации. Прямая работа с сокетами и HTTP-протоколом в C++ сложна и подвержена ошибкам. Библиотеки, такие как libcurl и cpprestsdk, абстрагируют эту сложность, предоставляя удобный интерфейс для выполнения HTTP-запросов (GET, POST, PUT) и обработки ответов JSON/XML.
Мы будем использовать API SMS-провайдера (например, Twilio, SMS.ru или любого другого, поддерживающего REST API). В примерах ниже замените YOUR_API_KEY, YOUR_SENDER и YOUR_PHONE на свои реальные данные.
Библиотека 1: libcurl (CURL)
libcurl — это проверенная временем библиотека для работы с URL, поддерживающая множество протоколов (HTTP, HTTPS, FTP и др.). Она написана на C, но имеет отличные C++ биндинги. Для использования в C++ проекте достаточно подключить заголовочный файл curl/curl.h и линковаться с libcurl.
Установка libcurl
- Linux (Ubuntu/Debian):
sudo apt-get install libcurl4-openssl-dev - Windows: скачайте предварительно собранные бинарные файлы с официального сайта или используйте vcpkg:
vcpkg install curl - macOS:
brew install curl
Пример отправки SMS через libcurl (C++ синтаксис)
В этом примере мы используем простой POST-запрос с данными в формате JSON. Библиотека libcurl обрабатывает HTTP-заголовки и тело запроса.
#include <iostream>
#include <string>
#include <curl/curl.h>
// Функция обратного вызова для записи ответа сервера
size_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"; // Замените на URL вашего провайдера
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 << "Ошибка curl: " << curl_easy_strerror(res) << std::endl;
return false;
}
std::cout << "Ответ сервера: " << response << std::endl;
return true;
}
int main() {
curl_global_init(CURL_GLOBAL_DEFAULT);
sendSMS_via_libcurl("+79991234567", "Привет от C++ через libcurl!");
curl_global_cleanup();
return 0;
}
Библиотека 2: cpprestsdk (Casablanca)
cpprestsdk (ранее известная как Casablanca) — это современная асинхронная библиотека для C++, разработанная Microsoft. Она предоставляет удоб