عميل HTTP للغة C++: أفضل المكتبات للعمل مع الشبكة

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

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

ابدأ الدورة

عميل HTTP للغة C++: مراجعة أفضل المكتبات



عند تطوير التطبيقات الحديثة بلغة C++، غالبًا ما تنشأ الحاجة للتفاعل مع خوادم الويب باستخدام بروتوكول HTTP. سواء كان تحميل البيانات من API، أو إرسال النماذج، أو تبادل رسائل JSON - لا يمكن الاستغناء عن عميل HTTP موثوق. على عكس العديد من اللغات الحديثة، لا تتضمن المكتبة القياسية للغة C++ أدوات مدمجة للعمل مع HTTP. لحسن الحظ، توجد العديد من المكتبات الناضجة وعالية الأداء التي تحل هذه المشكلة. في هذه المقالة، سنستعرض أربعة من أفضل عملاء HTTP للغة C++، ونقارن ميزاتهم، ونقدم أمثلة عملية.



1. libcurl (cURL)



libcurl هي بلا شك المكتبة الأكثر شهرة والمختبرة عبر الزمن لنقل البيانات عبر بروتوكولات متعددة، بما في ذلك HTTP/1.1 و HTTP/2. هي مكتوبة بلغة C، ولكن لها أغلفة ممتازة للغة C++ (مثل curlpp). تُستخدم libcurl في آلاف المشاريع، من الأنظمة المدمجة إلى تطبيقات الخوادم.



الميزات الرئيسية:

  • دعم HTTP، HTTPS، FTP، SMTP والعديد من البروتوكولات الأخرى.
  • العمل مع SSL/TLS (OpenSSL، Schannel، NSS).
  • الطلبات غير المتزامنة عبر واجهة multi.
  • إعداد مرن للرؤوس، ملفات تعريف الارتباط، البروكسي، المهلات الزمنية.
  • التوافق عبر المنصات (Windows، Linux، macOS، أنظمة تشغيل الجوال).


مثال بسيط لطلب GET باستخدام الغلاف C++ curlpp:



#include <curlpp/cURLpp.hpp>#include <curlpp/Easy.hpp>#include <sstream>

int main() { try { curlpp::Cleanup cleaner; curlpp::Easy request;

// إعداد URL request.setOpt(new curlpp::options::Url("https://api.example.com/data"));

// الحصول على الاستجابة في تيار نصي std::ostringstream response; request.setOpt(new curlpp::options::WriteStream(&response));

// تنفيذ الطلب request.perform();

std::cout << "الاستجابة: " << response.str() << std::endl; } catch (curlpp::RuntimeError & e) { std::cerr << "خطأ: " << e.what() << std::endl; } return 0;}


2. C++ REST SDK (cpprestsdk)



C++ REST SDK (المعروف سابقًا باسم Casablanca) هي مكتبة غير متزامنة من Microsoft، موجهة للعمل مع خدمات RESTful. توفر واجهة سهلة الاستخدام تعتمد على pplx::task (مشابه لـ C++ std::future)، مما يبسط كتابة الكود غير المحظور.



الميزات الرئيسية:

  • عدم التزامن الكامل بناءً على task و continuation.
  • دعم مدمج لـ JSON (cpprest/json.h).
  • عميل WebSocket.
  • العمل مع HTTP/HTTPS، المصادقة (Basic، OAuth).
  • التوافق عبر المنصات (Windows، Linux، macOS).


مثال لطلب POST غير متزامن مع JSON:



#include <cpprest/http_client.h>#include <cpprest/filestream.h>#include <cpprest/json.h>

using namespace web;using namespace web::http;using namespace web::http::client;

int main() { http_client client(U("https://api.example.com"));

// تشكيل نص JSON للطلب json::value body; body[U("name")] = json::value::string(U("John")); body[U("age")] = json::value::number(30);

// طلب POST client.request(methods::POST, U("/users"), body.serialize(), U("application/json")) .then([](http_response response) { if (response.status_code() == status_codes::Created) { return response.extract_json(); } throw std::runtime_error("خطأ في الطلب"); }) .then([](json::value answer) { std::cout << "الاستجابة: " << answer.serialize() << std::endl;

توصيات