إرسال رسائل SMS بلغة C++ باستخدام مكتبة libcurl
في التطوير الحديث، غالبًا ما تكون هناك حاجة للتكامل مع الخدمات الخارجية لإرسال رسائل SMS. بلغة C++، يمكن حل هذه المهمة بفعالية باستخدام مكتبة libcurl — وهي أداة قوية للعمل مع بروتوكولات HTTP/HTTPS. توفر مكتبة libcurl واجهة برمجة تطبيقات بسيطة ومرنة لتنفيذ الطلبات إلى خدمات REST، بما في ذلك إرسال رسائل SMS عبر API لمزودي الخدمة.
ما هي libcurl؟
libcurl هي مكتبة متعددة المنصات لنقل البيانات عبر بروتوكولات مختلفة (HTTP، HTTPS، FTP، SMTP وغيرها). تُستخدم على نطاق واسع في مشاريع C++ بفضل استقرارها وأدائها وتوثيقها الشامل. لإرسال رسائل SMS، سنحتاج إلى وظيفة طلبات 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.
مثال أساسي: إرسال رسالة SMS عبر HTTP POST
دعنا ننظر في إرسال رسالة SMS باستخدام API لخدمة شائعة (مثل Twilio أو Nexmo أو نظير روسي). في المثال أدناه، نرسل طلب POST مع بيانات JSON تحتوي على رقم المستلم ونص الرسالة.
#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) { // URL نقطة نهاية API (استبدله بنقطة نهايتك) 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 << "تم إرسال SMS بنجاح. الرد: " << response << std::endl; return true; } else { std::cerr << "خطأ في الخادم. HTTP " << httpCode << ": " << response << std::endl;