C++ के लिए HTTP-क्लाइंट: सर्वश्रेष्ठ लाइब्रेरी का अवलोकन
\n\nC++ में आधुनिक अनुप्रयोगों को विकसित करते समय, HTTP प्रोटोकॉल के माध्यम से वेब सर्वरों के साथ बातचीत की आवश्यकता अक्सर उत्पन्न होती है। चाहे वह API से डेटा डाउनलोड करना हो, फॉर्म भेजना हो, या JSON संदेशों का आदान-प्रदान करना हो - एक विश्वसनीय HTTP-क्लाइंट के बिना काम नहीं चल सकता। कई आधुनिक भाषाओं के विपरीत, C++ की मानक लाइब्रेरी में HTTP के साथ काम करने के लिए अंतर्निहित साधन शामिल नहीं हैं। सौभाग्य से, कई परिपक्व और उच्च-प्रदर्शन वाली लाइब्रेरी हैं जो इस कार्य को हल करती हैं। इस लेख में, हम C++ के लिए चार सर्वश्रेष्ठ HTTP-क्लाइंट्स की समीक्षा करेंगे, उनकी विशेषताओं की तुलना करेंगे और व्यावहारिक उदाहरण देंगे।
\n\n1. libcurl (cURL)
\n\nlibcurl HTTP/1.1 और HTTP/2 सहित विभिन्न प्रोटोकॉल पर डेटा स्थानांतरित करने के लिए शायद सबसे लोकप्रिय और समय-परीक्षित लाइब्रेरी है। यह C में लिखी गई है, लेकिन इसमें C++ के लिए उत्कृष्ट रैपर हैं (उदाहरण के लिए, curlpp)। libcurl का उपयोग एम्बेडेड सिस्टम से लेकर सर्वर अनुप्रयोगों तक, हजारों परियोजनाओं में किया जाता है।
मुख्य विशेषताएं:
\n- \n
- HTTP, HTTPS, FTP, SMTP और कई अन्य प्रोटोकॉल के लिए समर्थन। \n
- SSL/TLS (OpenSSL, Schannel, NSS) के साथ कार्य। \n
multiइंटरफ़ेस के माध्यम से अतुल्यकालिक अनुरोध। \n - हेडर, कुकीज़, प्रॉक्सी, टाइमआउट का लचीला कॉन्फ़िगरेशन। \n
- क्रॉस-प्लेटफ़ॉर्म (Windows, Linux, macOS, मोबाइल OS)। \n
C++ रैपर curlpp का उपयोग करके GET-अनुरोध का सरल उदाहरण:
\n\n#include <curlpp/cURLpp.hpp>\n#include <curlpp/Easy.hpp>\n#include <sstream>\n\nint main() {\n try {\n curlpp::Cleanup cleaner;\n curlpp::Easy request;\n\n // URL सेट करना\n request.setOpt(new curlpp::options::Url("https://api.example.com/data"));\n\n // स्ट्रिंग स्ट्रीम में प्रतिक्रिया प्राप्त करना\n std::ostringstream response;\n request.setOpt(new curlpp::options::WriteStream(&response));\n\n // अनुरोध निष्पादित करना\n request.perform();\n\n std::cout << "उत्तर: " << response.str() << std::endl;\n }\n catch (curlpp::RuntimeError & e) {\n std::cerr << "त्रुटि: " << e.what() << std::endl;\n }\n return 0;\n}\n\n2. C++ REST SDK (cpprestsdk)
\n\nC++ REST SDK (पहले Casablanca के नाम से जाना जाता था) Microsoft की एक अतुल्यकालिक लाइब्रेरी है, जो RESTful सेवाओं के साथ काम करने पर केंद्रित है। यह pplx::task (C++ std::future का एनालॉग) पर आधारित एक सुविधाजनक इंटरफ़ेस प्रदान करता है, जो नॉन-ब्लॉकिंग कोड लिखने को सरल बनाता है।
मुख्य विशेषताएं:
\n- \n
taskऔरcontinuationपर आधारित पूर्ण अतुल्यकालिकता। \n - अंतर्निहित JSON समर्थन (cpprest/json.h)। \n
- WebSocket क्लाइंट। \n
- HTTP/HTTPS, प्रमाणीकरण (Basic, OAuth) के साथ कार्य। \n
- क्रॉस-प्लेटफ़ॉर्म (Windows, Linux, macOS)। \n
JSON के साथ अतुल्यकालिक POST-अनुरोध का उदाहरण:
\n\n#include <cpprest/http_client.h>\n#include <cpprest/filestream.h>\n#include <cpprest/json.h>\n\nusing namespace web;\nusing namespace web::http;\nusing namespace web::http::client;\n\nint main() {\n http_client client(U("https://api.example.com"));\n\n // अनुरोध का JSON बॉडी बनाना\n json::value body;\n body[U("name")] = json::value::string(U("John"));\n body[U("age")] = json::value::number(30);\n\n // POST अनुरोध\n client.request(methods::POST, U("/users"), body.serialize(), U("application/json"))\n .then([](http_response response) {\n if (response.status_code() == status_codes::Created) {\n return response.extract_json();\n }\n throw std::runtime_error("अनुरोध त्रुटि");\n })\n .then([](json::value answer) {\n std::cout << "उत्तर: " << answer.serialize() << std::endl;\n पुस्तकालय में भी
जावास्क्रिप्ट (Node.js) में रिएक्टिव प्रोग्रामिंग: RxJS और ऑब्ज़र्वेबल्स
जावा में XML के साथ कार्य: पार्सिंग के लिए लाइब्रेरी और उपकरण
Flysystem PHP: पूर्ण गाइड उदाहरणों के साथ