إرسال SMS بلغة C++: مكتبات API libcurl و cpprestsdk

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال SMS بلغة C++: مكتبات API libcurl و cpprestsdk



في التطوير الحديث بلغة C++، غالبًا ما تنشأ الحاجة إلى التكامل مع الخدمات الخارجية، بما في ذلك إرسال رسائل SMS. على الرغم من أن المكتبة القياسية للغة C++ لا توفر أدوات مدمجة للعمل مع طلبات HTTP، إلا أن هناك مكتبات خارجية قوية تحل هذه المشكلة. في هذه المقالة، سنستعرض مكتبتين شائعتين — libcurl (CURL) و cpprestsdk (Casablanca) — وسنوضح كيفية استخدامهما لإرسال SMS عبر API لمزودي خدمة SMS المشهورين.



لماذا تحتاج إلى مكتبة لإرسال SMS بلغة C++؟



إرسال SMS عبر C++ هو مهمة نموذجية لتطبيقات الخادم، وأنظمة المراقبة، والإشعارات، أو الأتمتة. العمل المباشر مع المقابس (sockets) وبروتوكول 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

  • لينكس (Ubuntu/Debian): sudo apt-get install libcurl4-openssl-dev
  • ويندوز: قم بتنزيل الملفات الثنائية المجمعة مسبقًا من الموقع الرسمي أو استخدم 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_DEF

توصيات