ما هو Poco ولماذا هو مطلوب؟
\n\nPOCO (POrtable COmponents) هي مكتبة فئات قوية متعددة المنصات للغة C++، توفر حلولاً جاهزة لتطوير تطبيقات الشبكات، وتعدد المهام، والعمل مع قواعد البيانات، وXML، وJSON، وHTTP، وFTP، وSMTP، والعديد من المهام الأخرى. المكتبة مكتوبة بلغة C++ الحديثة ويتم توزيعها بموجب ترخيص Boost Software License، مما يسمح باستخدامها في المشاريع التجارية دون قيود.
\n\nالمزايا الرئيسية لـ Poco:
\n- \n
- التعدد المنصات — تعمل على Windows، Linux، macOS، iOS، Android \n
- النمطية — يمكن ربط المكونات المطلوبة فقط \n
- الأداء — محسّنة للأنظمة عالية التحميل \n
- الشمولية — تغطي 90% من المهام النموذجية لمطور C++ \n
بالنسبة للموقع التعليمي pythonlib.ru، من المهم ملاحظة أن Poco هو نظير لمكتبات Python الشهيرة (requests، asyncio، smtplib)، ولكن للغة C++. إذا كنت تعرف Python وتنتقل إلى C++، فسيكون Poco أفضل صديق لك.
\n\nتثبيت Poco
\n\nالتثبيت عبر مديري الحزم
\n\nLinux (Ubuntu/Debian):
\nsudo apt-get update\nsudo apt-get install libpoco-dev\n\nmacOS (Homebrew):
\nbrew install poco\n\nWindows (vcpkg):
\nvcpkg install poco\n\nالتثبيت من المصدر
\ngit clone https://github.com/pocoproject/poco.git\ncd poco\nmkdir cmake-build\ncd cmake-build\ncmake ..\ncmake --build . --config Release\nsudo cmake --install .\n\nالربط في مشروع CMake
\nfind_package(Poco REQUIRED COMPONENTS Net NetSSL Util JSON XML)\ntarget_link_libraries(myapp Poco::Net Poco::Util Poco::JSON Poco::XML)\n\nبداية سريعة: عميل HTTP في 5 دقائق
\n\nلنكتب عميل HTTP بسيطًا يحصل على بيانات من موقع ويب ويعرضها في وحدة التحكم:
\n\n#include <Poco/Net/HTTPClientSession.h>\n#include <Poco/Net/HTTPRequest.h>\n#include <Poco/Net/HTTPResponse.h>\n#include <Poco/StreamCopier.h>\n#include <iostream>\n\nint main() {\n try {\n // إنشاء جلسة HTTP\n Poco::Net::HTTPClientSession session("api.github.com");\n \n // تكوين طلب GET\n Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, "/users/octocat");\n request.setContentType("application/json");\n \n // إرسال الطلب\n session.sendRequest(request);\n \n // استلام الرد\n Poco::Net::HTTPResponse response;\n std::istream &responseStream = session.receiveResponse(response);\n \n // عرض الحالة ونص الرد\n std::cout << "Status: " << response.getStatus() << " " << response.getReason() << std::endl;\n std::cout << "Body:" << std::endl;\n Poco::StreamCopier::copyStream(responseStream, std::cout);\n \n } catch (Poco::Exception &ex) {\n std::cerr << "Error: " << ex.displayText() << std::endl;\n return 1;\n }\n return 0;\n}\n\nالتجميع:
\ng++ -o http_client http_client.cpp -lPocoNet -lPocoFoundation\n\nالطرق والوظائف الأساسية لـ Poco (أدوات الشبكات)
\n\n1. HTTPClientSession — إنشاء جلسة HTTP
\nما يفعله: ينشئ اتصالاً بخادم HTTP ويدير إرسال الطلبات واستلام الردود.
\nالمعلمات:
\n- \n
host— سلسلة نصية تحتوي على عنوان الخادم \n port— المنفذ (الافتراضي 80 لـ HTTP) \n timeout— مهلة الاتصال \n
مثال:
\nPoco::Net::HTTPClientSession session