परिचय: C++ में HTTP क्लाइंट क्यों लिखें?
आधुनिक विकास में, दूरस्थ सर्वरों के साथ इंटरैक्शन प्रमुख कार्यों में से एक है। चाहे वह REST API से डेटा प्राप्त करना हो, सर्वर पर फॉर्म भेजना हो या फ़ाइल डाउनलोड करना हो - हर जगह HTTP प्रोटोकॉल का उपयोग किया जाता है। हालाँकि Python और JavaScript सरल अंतर्निहित समाधान प्रदान करते हैं, फिर भी उच्च-प्रदर्शन वाले HTTP क्लाइंट लिखने के लिए C++ की मांग बनी हुई है। यह एम्बेडेड सिस्टम, गेम इंजन, उच्च-लोड बैकएंड या केवल नेटवर्क के निम्न-स्तरीय तंत्रों को सीखने के लिए आवश्यक है।
इस लेख में, हम C++ में HTTP क्लाइंट को लागू करने के दो लोकप्रिय तरीकों पर चर्चा करेंगे: libcurl (cURL) लाइब्रेरी का उपयोग करना और Boost.Beast के साथ अधिक आधुनिक एसिंक्रोनस दृष्टिकोण। आप सीखेंगे कि GET और POST अनुरोधों को सही तरीके से कैसे बनाया जाए, प्रतिक्रियाओं को कैसे संसाधित किया जाए और सामान्य गलतियों से कैसे बचा जाए।
1. क्लासिक दृष्टिकोण: libcurl के साथ C++ में HTTP क्लाइंट
libcurl लाइब्रेरी विभिन्न प्रोटोकॉल पर डेटा स्थानांतरित करने के लिए एक समय-परीक्षित उपकरण है। यह HTTP/1.1, HTTP/2, HTTPS, प्रमाणीकरण, कुकीज़ और बहुत कुछ का समर्थन करती है। C++ के लिए एक सुविधाजनक रैपर curl/curl.h है, जो आपको अपने प्रोजेक्ट में cURL को आसानी से एकीकृत करने की अनुमति देता है।
libcurl की स्थापना
अधिकांश Linux वितरणों में cURL पहले से स्थापित होता है। विकास के लिए डेवलपर पैकेज की आवश्यकता होगी:
sudo apt-get install libcurl4-openssl-dev # Ubuntu/Debianbrew install curl # macOSउदाहरण: GET अनुरोध
आइए एक सरल C++ HTTP क्लाइंट लिखें जो सार्वजनिक API (जैसे, JSONPlaceholder) से डेटा प्राप्त करता है।
#include <iostream>#include <string>#include <curl/curl.h>
// std::string में डेटा लिखने के लिए Callbackstatic size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) { ((std::string*)userp)->append((char*)contents, size * nmemb); return size * nmemb;}
int main() { CURL *curl; CURLcode res; std::string readBuffer;
curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init();
if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); // अनुरोध निष्पादित करें res = curl_easy_perform(curl); if(res != CURLE_OK) { std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl; } else { std::cout << "सर्वर प्रतिक्रिया:" << readBuffer << std::endl; } curl_easy_cleanup(curl); } curl_global_cleanup(); return 0;}उदाहरण: JSON के साथ POST अनुरोध
अब सर्वर पर डेटा भेजते हैं। इसके लिए कंटेंट प्रकार और अनुरोध का मुख्य भाग निर्दिष्ट करना होगा।
#include <iostream>#include <string>#include <curl/curl.h>
int main() { CURL *curl; CURLcode res; std::string response; // भेजने के लिए JSON डेटा std::string jsonData = R"({"title": "foo", "body": "bar", "userId": 1})"; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); // हेडर सेट करें struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // प्रतिक्रिया लिखने के लिए Callback curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [](void *contents, size_t size, size_t nmemb, void *userp) -> siz