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

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

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

ابدأ الدورة

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



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



1. cpp-httplib — البساطة والخفة



cpp-httplib (أو ببساطة httplib) هي مكتبة من نوع header-only لا تتطلب تثبيتًا. إنها مثالية للمشاريع الصغيرة حيث لا ترغب في التعامل مع التبعيات.



  • الإيجابيات: واجهة برمجة تطبيقات بسيطة، تعمل "فورًا"، تدعم HTTPS (عبر OpenSSL).
  • السلبيات: وظائف محدودة (لا توجد طلبات متعددة الخيوط، ولا WebSocket).


#include <httplib.h>#include <iostream>

int main() { httplib::Client cli("http://jsonplaceholder.typicode.com"); auto res = cli.Get("/posts/1"); if (res && res->status == 200) { std::cout << "الرد: " << res->body << std::endl; } return 0;}


2. libcurl — المخضرم المثبت



libcurl هو المعيار الفعلي للعمل مع HTTP في C/C++. يُستخدم في آلاف المشاريع، بما في ذلك خوادم الويب والأدوات سطر الأوامر. يتطلب تثبيت المكتبة والربط.



  • الإيجابيات: عدد هائل من البروتوكولات (HTTP/2، FTP، SMTP، WebSocket)، عبر المنصات، أداء عالٍ.
  • السلبيات: واجهة برمجة تطبيقات بأسلوب C (غير مريحة لـ C++)، إعداد معقد لتعدد الخيوط.


#include <curl/curl.h>#include <string>

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t total = size * nmemb; output->append((char*)contents, total); return total;}

int main() { CURL* curl = curl_easy_init(); if (curl) { std::string response; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); curl_easy_perform(curl); curl_easy_cleanup(curl); } return 0;}


3. Boost.Beast — قوة Boost وعدم التزامن



Boost.Beast هو جزء من نظام Boost البيئي، ويوفر إمكانيات HTTP و WebSocket منخفضة المستوى. المكتبة مبنية على Boost.Asio، مما يمنحك تحكمًا كاملاً في العمليات غير المتزامنة.



  • الإيجابيات: عدم تزامن كامل، دعم HTTP/1.1، WebSocket، توافق مع C++17/20.
  • السلبيات: يتطلب فهمًا عميقًا لـ Asio، حجم كبير من الكود للطلبات البسيطة.


#include <boost/beast/core.hpp>#include <boost/beast/http.hpp>#include <boost/asio.hpp>#include <iostream>

namespace beast = boost::beast;namespace http = beast::http;namespace net = boost::asio;

int main() { net::io_context ioc; beast::tcp_stream stream(ioc); stream.connect("httpbin.org", 80);

http::request<http::string_body> req{http::verb::get, "/get", 11}; req.set(http::field::host, "httpbin.org"); http::write(stream, req);

beast::flat_buffer buffer; http::response<http::dynamic_body> res; http::read(stream, buffer, res); std::cout << beast::buffers_to_string(res.body().data()) << std::endl; return 0;}


4. Poco — المعيار المؤسسي



Poco (POrtable COmponents) هو إطار عمل متكامل للغة C++، يشمل عميل HTTP، خادم، مآخذ شبكة، العمل مع XML/JSON

توصيات