C++ के लिए HTTP-क्लाइंट: नेटवर्क कार्य के लिए शीर्ष लाइब्रेरीज़

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ के लिए HTTP-क्लाइंट: सर्वश्रेष्ठ लाइब्रेरीज़ का अवलोकन



C++ में नेटवर्क एप्लिकेशन विकसित करना पारंपरिक रूप से एक कठिन कार्य माना जाता था, क्योंकि HTTP के लिए अंतर्निहित समर्थन का अभाव और निम्न-स्तरीय सॉकेट के साथ काम करने की आवश्यकता थी। हालाँकि, आधुनिक लाइब्रेरीज़ इस समस्या को पूरी तरह से हल करती हैं, HTTP अनुरोध भेजने, प्रतिक्रियाओं को संसाधित करने और REST API के साथ काम करने के लिए सुविधाजनक, सुरक्षित और कुशल उपकरण प्रदान करती हैं। इस लेख में, हम चार सबसे लोकप्रिय और परिपक्व समाधानों की समीक्षा करेंगे जो आपको अपने C++ प्रोजेक्ट में HTTP-क्लाइंट को जल्दी से शामिल करने में मदद करेंगे।



1. libcurl — सार्वभौमिक मानक



libcurl HTTP/HTTPS, FTP, SMTP और कई अन्य प्रोटोकॉल सहित विभिन्न प्रोटोकॉल पर डेटा स्थानांतरित करने के लिए सबसे प्रसिद्ध और व्यापक रूप से उपयोग की जाने वाली लाइब्रेरी है। यह C में लिखी गई है, लेकिन इसमें C++ (curl/curl.h) के लिए एक आधिकारिक रैपर है। मुख्य लाभ: HTTP के लगभग सभी संस्करणों (HTTP/3 तक) के लिए समर्थन, प्रॉक्सी के साथ काम करना, प्रमाणीकरण, SSL/TLS, मल्टीथ्रेडिंग और एक विशाल समुदाय।



libcurl का उपयोग करके एक सरल GET-अनुरोध का उदाहरण:



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

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* buffer) { size_t totalSize = size * nmemb; buffer->append(static_cast<char*>(contents), totalSize); return totalSize;}

int main() { CURL* curl = curl_easy_init(); if (curl) { std::string response; curl_easy_setopt(curl, CURLOPT_URL, "https://api.example.com/data"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

CURLcode res = curl_easy_perform(curl); if (res == CURLE_OK) { // response के साथ काम करें } curl_easy_cleanup(curl); } return 0;}


कमियाँ: C-style API (मैन्युअल मेमोरी प्रबंधन की आवश्यकता), लिंकिंग फ़्लैग्स (-lcurl) के साथ संकलन की आवश्यकता।



2. cpp-httplib — हल्की और header-only लाइब्रेरी



cpp-httplib (लेखक yhirose) C++11 और उससे ऊपर के लिए एक आधुनिक, एकल-हेडर (header-only) लाइब्रेरी है। इसे HTTPS के लिए OpenSSL को छोड़कर किसी बाहरी निर्भरता की आवश्यकता नहीं है और यह छोटे प्रोजेक्ट, माइक्रोसर्विसेज और प्रोटोटाइपिंग के लिए आदर्श है। यह सिंक्रोनस और एसिंक्रोनस अनुरोध, कुकीज़, टाइमआउट, मल्टीपार्ट/फॉर्म-डेटा का समर्थन करता है।



JSON के साथ POST-अनुरोध का उदाहरण:



#include <httplib.h>

int main() { httplib::Client cli("https://api.example.com"); httplib::Headers headers = { {"Content-Type", "application/json"} }; auto res = cli.Post("/submit", headers, R"({"key":"value"})", "application/json"); if (res && res->status == 200) { std::cout << res->body << std::endl; } return 0;}


लाभ: न्यूनतम प्रवेश सीमा, कोई लिंकिंग नहीं, स्वच्छ C++ कोड। कमियाँ: उन्नत सुविधाओं (जैसे HTTP/2) के लिए सीमित समर्थन।



3. Boost.Beast — पेशेवरों के लिए शक्तिशाली उपकरण



Boost.Beast Boost टीम की एक लाइब्रेरी है, जो Boost.Asio के ऊपर बनाई गई है। यह HTTP/1.x और WebSocket कनेक्शन पर निम्न-स्तरीय नियंत्रण प्रदान करती है। यह उच्च-लोड सिस्टम के लिए अनुशंसित है जहाँ प्रदर्शन और एसिंक्रोनस प्रोसेसिंग महत्वपूर्ण है।



एसिंक्रोनस HTTP-क्लाइंट का उदाहरण (अंश):



#include <boost/beast/core.hpp>#include <boost/beast/http.hpp>#include <boost/beast/version.hpp>#include <boost/asio/connect.hpp>#include <boost/asio/ip/tcp.hpp>

namespace beast = boost::beast;namespace http = beast::http;namespace net = boost::asio;using tcp = net::ip::tcp;

int main() { net::io_context ioc; tcp::resolver resolver(ioc); beast::tcp_stream stream(ioc);

auto const results = resolver.resolv

अनुशंसाएँ