C++ में HTTP क्लाइंट: सही तरीके से अनुरोध करना

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

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

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

परिचय: C++ में HTTP क्लाइंट क्यों लिखें?

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

इस लेख में हम देखेंगे:

  • libcurl लाइब्रेरी का उपयोग कैसे करें - C++ में HTTP के साथ काम करने के लिए गोल्ड स्टैंडर्ड
  • हेडर और बॉडी के साथ GET और POST अनुरोध कैसे भेजें
  • प्राप्त प्रतिक्रिया को कैसे संसाधित करें और JSON को कैसे पार्स करें
  • नेटवर्क अनुरोधों के साथ काम करते समय सामान्य गलतियों से कैसे बचें

सभी कोड उदाहरणों का उपयोग आप सीधे अपने प्रोजेक्ट्स में कर सकते हैं। चलिए शुरू करते हैं!

1. लाइब्रेरी का चयन: मुख्य उपकरण के रूप में libcurl

शुरू से C++ में HTTP क्लाइंट लिखना एक कृतघ्न कार्य है। आपको सॉकेट के साथ काम करना होगा, मैन्युअल रूप से हेडर बनाने होंगे, प्रतिक्रियाओं को पार्स करना होगा और बहुत सारे किनारे के मामलों को संभालना होगा। सौभाग्य से, libcurl मौजूद है - एक शक्तिशाली, स्थिर और क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी जो आपके लिए सारा गंदा काम करती है।

शुरू करने के लिए, libcurl इंस्टॉल करें। Ubuntu पर यह एक कमांड से होता है:

sudo apt-get install libcurl4-openssl-dev

Windows पर आप vcpkg का उपयोग कर सकते हैं या तैयार बाइनरी डाउनलोड कर सकते हैं। इंस्टॉल करने के बाद, अपने CMakeLists.txt में लाइब्रेरी को कनेक्ट करें या -lcurl फ़्लैग के साथ मैन्युअल रूप से लिंक करें।

libcurl के साथ काम करने की मूल संरचना हमेशा समान होती है:

  1. curl_global_init() कॉल करके ग्लोबल कॉन्टेक्स्ट को इनिशियलाइज़ करें
  2. curl_easy_init() के साथ एक सत्र डिस्क्रिप्टर बनाएँ
  3. अनुरोध पैरामीटर सेट करें (URL, हेडर, विधि आदि)
  4. curl_easy_perform() के साथ अनुरोध निष्पादित करें
  5. संसाधनों को साफ़ करें

सरल लगता है? आइए कोड की ओर बढ़ते हैं।

2. GET और POST अनुरोध भेजना: व्यावहारिक उदाहरण

2.1 सरल GET-अनुरोध

क्लासिक से शुरू करते हैं - एक सार्वजनिक API से डेटा प्राप्त करें। मान लीजिए, हम डॉलर के मुकाबले Bitcoin की वर्तमान दर जानना चाहते हैं:

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

// स्ट्रिंग में डेटा लिखने के लिए Callback-फ़ंक्शन
static 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_global_init(CURL_GLOBAL_DEFAULT);
    CURL* curl = curl_easy_init();
    std::string response;
    
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://api.coindesk.com/v1/bpi/currentprice.json");
        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 << "सर्वर प्रतिक्रिया:" << response << std::endl;
        }
        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();
    return 0;
}

WriteCallback callback-फ़ंक्शन पर ध्यान दें। libcurl नहीं जानता कि डेटा कहाँ सहेजना है, इसलिए हम स्ट्रिंग पर एक पॉइंटर पास करते हैं और डेटा आने पर उसमें लिखते हैं। यह एक मानक पैटर्न है।

2.2 JSON-बॉडी के साथ POST-अनुरोध

अब सर्वर पर डेटा भेजते हैं। मान लीजिए, हम एक उपयोगकर्ता को पंजीकृत कर रहे हैं:

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

int main() {
    curl_global_init(CURL_GLOBAL_DEFAULT);
    CURL* curl = curl
```                

ब्लॉग

पुस्तक अनुशंसाएँ