إرسال SMS بلغة C++: مكتبة LibCurl API وطلبات REST

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

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

ابدأ الدورة

إرسال SMS بلغة C++: دليل كامل لاستخدام API مع مكتبة LibCurl



يُعد إرسال رسائل SMS إحدى الوظائف الأساسية للتطبيقات الحديثة: من المصادقة الثنائية إلى الإشعارات بحالة الطلب. في بيئة C++، لا توجد أدوات مدمجة للعمل مع بوابات SMS، ولكن باستخدام المكتبة العامة libcurl وطلبات HTTP القياسية، يمكن دمج أي REST API لمزود SMS بسهولة. في هذه المقالة، سنشرح كيفية كتابة دالة موثوقة لإرسال SMS بلغة C++ باستخدام مكتبة LibCurl، وسنستعرض أمثلة نموذجية للخدمات الشائعة (Twilio، SMS Aero، Bytehand).



لماذا LibCurl؟

LibCurl هي مكتبة متعددة المنصات لنقل البيانات عبر بروتوكولات مختلفة (HTTP، HTTPS، FTP وغيرها). وهي تدعم:

  • طلبات GET، POST، PUT، DELETE
  • SSL/TLS (HTTPS)
  • العمل مع رؤوس الطلب ونص الطلب
  • معالجة استجابات الخادم

لإرسال SMS، يكفي تنفيذ طلب POST إلى API المزود المختار، مع تمرير المعلمات الضرورية (رقم الهاتف، النص، مفتاح API). تتولى LibCurl جميع الأعمال منخفضة المستوى المتعلقة بالمقابس والتشفير.



تثبيت المكتبة

في معظم توزيعات Linux، يمكن تثبيت LibCurl عبر مدير الحزم:

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

بالنسبة لنظام Windows، يمكن تنزيل ملفات DLL المجمعة مسبقًا من الموقع الرسمي أو استخدام vcpkg:

vcpkg install curl

الربط في الكود:

#include <curl/curl.h>#include <string>#include <json/json.h>  // إذا كنت تستخدم JSON (nlohmann/json)


الهيكل الأساسي لدالة SMS

لننشئ دالة عامة sendSms تستقبل عنوان URL الخاص بـ API، والمفتاح، ورقم المستلم، ونص الرسالة. للعمل مع JSON، يُفضل استخدام مكتبة nlohmann/json (ملف رأس فقط، لا يتطلب بناء).



#include <iostream>#include <string>#include <curl/curl.h>#include <nlohmann/json.hpp>

using json = nlohmann::json;

// رد اتصال لكتابة استجابة الخادم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& url, const std::string& apiKey, const std::string& phone, const std::string& message) { CURL *curl; CURLcode res; std::string readBuffer;

curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();

if(!curl) return false;

// تكوين نص طلب JSON json payload; payload["phone"] = phone; payload["text"] = message; payload["api_key"] = apiKey;

std::string jsonStr = payload.dump();

// إعداد طلب HTTP struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "Accept: application/json");

curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonStr.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);

// تنفيذ الطلب res = curl_easy_perform(curl);

// التنظيف curl_easy_cleanup(curl); curl_global_cleanup();

if(res != CURLE_OK) { std::cerr << "خطأ curl: " << curl_easy_strerror(res) << std::endl; return false; }

// تحليل الاستجابة (مثال لـ Twilio) try { json response = json::parse(readBuffer); if(response.co

توصيات