C++ में HTTP क्लाइंट: अनुरोधों को सही ढंग से करना A से Z तक
प्रोग्रामिंग की आधुनिक दुनिया में, HTTP प्रोटोकॉल के माध्यम से दूरस्थ सर्वरों के साथ इंटरैक्शन एक बुनियादी कार्य है। चाहे वह API से डेटा प्राप्त करना हो, फॉर्म भेजना हो या फ़ाइल डाउनलोड करना हो — HTTP अनुरोधों के साथ काम करने की क्षमता प्रत्येक C++ डेवलपर के लिए आवश्यक है। इस लेख में, हम C++ में एक पूर्ण HTTP क्लाइंट बनाने का तरीका समझेंगे, लोकप्रिय लाइब्रेरीज़ और सर्वोत्तम प्रथाओं पर चर्चा करेंगे।
C++ में HTTP क्लाइंट की आवश्यकता क्यों है?
अंतर्निहित HTTP लाइब्रेरीज़ (Python, JavaScript) वाली भाषाओं के विपरीत, C++ के मानक लाइब्रेरी में HTTP के साथ काम करने के लिए कोई मानक उपकरण नहीं है। हालाँकि, यह कोई समस्या नहीं है, क्योंकि कई शक्तिशाली और समय-परीक्षित समाधान मौजूद हैं:
- libcurl — URL के साथ काम करने के लिए सबसे लोकप्रिय और शक्तिशाली लाइब्रेरी
- cpprestsdk (Casablanca) — Microsoft की आधुनिक एसिंक्रोनस लाइब्रेरी
- Boost.Beast — निम्न-स्तरीय कार्य के लिए Boost.Asio पर आधारित लाइब्रेरी
इस लेख में, हम सबसे अधिक उपयोग किए जाने वाले समाधानों के रूप में libcurl और cpprestsdk पर ध्यान केंद्रित करेंगे।
libcurl के साथ मूल बातें
libcurl एक समय-परीक्षित लाइब्रेरी है जो HTTP/1.1, HTTP/2, FTP और अन्य सहित कई प्रोटोकॉल का समर्थन करती है। यह C में लिखी गई है, लेकिन इसमें C++ के लिए उत्कृष्ट बाइंडिंग हैं।
libcurl की स्थापना
libcurl की स्थापना आपके ऑपरेटिंग सिस्टम पर निर्भर करती है:
# Ubuntu/Debiansudo apt-get install libcurl4-openssl-dev
# macOS (Homebrew के माध्यम से)brew install curl
# Windows (vcpkg के माध्यम से)vcpkg install curllibcurl के साथ सरल GET अनुरोध
आइए एक बुनियादी उदाहरण से शुरू करें — GET अनुरोध भेजना और प्रतिक्रिया प्राप्त करना:
#include <iostream>#include <curl/curl.h>#include <string>
// डेटा लिखने के लिए कॉलबैक फ़ंक्शनsize_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t totalSize = size * nmemb; output->append(static_cast<char*>(contents), totalSize); return totalSize;}
int main() { CURL* curl = curl_easy_init(); if (!curl) { std::cerr << "CURL आरंभीकरण त्रुटि" << std::endl; return 1; }
std::string response; 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, &response); CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cerr << "अनुरोध त्रुटि: " << curl_easy_strerror(res) << std::endl; } else { std::cout << "सर्वर प्रतिक्रिया:" << std::endl; std::cout << response << std::endl; } curl_easy_cleanup(curl); return 0;}डेटा के साथ POST अनुरोध भेजना
POST अनुरोधों का उपयोग सर्वर पर डेटा भेजने के लिए किया जाता है। आइए JSON डेटा के साथ एक उदाहरण देखें:
#include <iostream>#include <curl/curl.h>#include <string>
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t totalSize = size * nmemb; output->append(static_cast<char*>(contents), totalSize); return totalSize;}
int main() { CURL* curl = curl_easy_init(); if (!curl) return 1;
std::string response; std::string jsonData = R"({"title": "foo", "body": "bar", "userId": 1})"; struct curl_slist* headers = nullptr; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_