वेब स्क्रैपिंग के लिए libcurl का उपयोग कैसे करें

Rajinder Singh
Deep Learning Researcher
22-Oct-2024

वेब स्क्रैपिंग वेबसाइटों से डेटा निकालने के लिए एक शक्तिशाली तकनीक है, जो मूल्य निर्धारण जानकारी एकत्रित करना, सामग्री अपडेट की निगरानी करना या बड़े डेटासेट एकत्र करना जैसे कार्यों के स्वचालन को सक्षम बनाता है। C++ में वेब स्क्रैपिंग करने के लिए सबसे लोकप्रिय पुस्तकालयों में से एक libcurl है, जो एक मुफ्त और ओपन-सोर्स क्लाइंट-साइड URL ट्रांसफर लाइब्रेरी है। यह HTTP, HTTPS, FTP, और बहुत कुछ जैसे कई प्रोटोकॉल का समर्थन करता है, जो इसे वेब सामग्री प्राप्त करने के लिए एक आदर्श विकल्प बनाता है।
libcurl का परिचय
libcurl HTTP अनुरोध करने के लिए एक शक्तिशाली C लाइब्रेरी है, जो HTTP, HTTPS, FTP, और कई अन्य जैसे विभिन्न प्रोटोकॉल का समर्थन करता है। यह एक लचीला उपकरण है जिसका उपयोग वेब अनुरोध करने के लिए C++ अनुप्रयोगों में व्यापक रूप से किया जाता है।
सुविधाएँ:
- बहु-प्रोटोकॉल समर्थन: HTTP, HTTPS, FTP, FTPS, SMTP, और कई अन्य।
- अतुल्यकालिक समर्थन: एक बार में कई अनुरोधों के प्रबंधन के लिए
CURLMके माध्यम से। - त्रुटि हैंडलिंग: विस्तृत त्रुटि संदेश और स्थिति कोड प्रदान करता है।
- प्रमाणीकरण: बेसिक, डाइजेस्ट, NTLM, नेगोशिएट, आदि का समर्थन करता है।
- कुकीज़ और सत्र: कुकीज़ और सत्र जानकारी को आसानी से प्रबंधित कर सकता है।
पूर्वापेक्षाएँ
libcurl का उपयोग करने से पहले, आपको यह करना होगा:
- अपने सिस्टम पर libcurl स्थापित करें।
- अपने C++ कोड में
curl/curl.hहेडर शामिल करें।
आप लिनक्स पर libcurl को इस प्रकार स्थापित कर सकते हैं:
bash
sudo apt-get install libcurl4-openssl-dev
बेसिक उदाहरण: GET अनुरोध करना
यहाँ C++ में libcurl का उपयोग करके एक सरल GET अनुरोध करने का तरीका बताया गया है:
cpp
#include <iostream>
#include <curl/curl.h>
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* 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://httpbin.org/get");
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 << "Response: " << readBuffer << std::endl;
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
वेब स्क्रैपिंग उदाहरण: API से JSON डेटा प्राप्त करना
यहाँ एक उदाहरण दिया गया है जहाँ हम एक API से डेटा प्राप्त करते हैं और परिणाम प्रिंट करते हैं:
cpp
#include <iostream>
#include <curl/curl.h>
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* 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");
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 << "Response: " << readBuffer << std::endl;
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
libcurl के साथ प्रॉक्सी को हैंडल करना
libcurl के साथ अपने अनुरोधों को प्रॉक्सी सर्वर के माध्यम से रूट करने के लिए:
cpp
#include <iostream>
#include <curl/curl.h>
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* 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://httpbin.org/ip");
curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxyserver:8080");
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, "username:password");
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 << "Response: " << readBuffer << std::endl;
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
libcurl के साथ कुकीज़ को हैंडल करना
libcurl COOKIEFILE विकल्प को सक्षम करके कुकीज़ का प्रबंधन कर सकता है:
cpp
#include <iostream>
#include <curl/curl.h>
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* 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://httpbin.org/cookies/set?name=value");
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
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 << "Response: " << readBuffer << std::endl;
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
उन्नत उपयोग: कस्टम हेडर और POST अनुरोध
libcurl के साथ कस्टम हेडर भेजने या POST अनुरोध करने के लिए:
cpp
#include <iostream>
#include <curl/curl.h>
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* curl;
CURLcode res;
std::string readBuffer;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
struct curl_slist* headers = nullptr;
headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0");
headers = curl_slist_append(headers, "Accept-Language: en-US,en;q=0.5");
curl_easy_setopt(curl, CURLOPT_URL, "https://httpbin.org/post");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "username=testuser&password=testpass");
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 << "Response: " << readBuffer << std::endl;
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
उदाहरण: CapSolver और libcurl (C++) के साथ ReCaptcha V3 को हल करना
इस उदाहरण में, हम प्रदर्शित करेंगे कि C++ में libcurl लाइब्रेरी का उपयोग करके CapSolver: के साथ ReCaptcha V3 को कैसे हल किया जाए। CapSolver API ReCaptcha कार्यों के साथ आसान बातचीत करने और समाधान प्राप्त करने की अनुमति देता है।
शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित पूर्वापेक्षाएँ हैं:
- libcurl आपके सिस्टम पर स्थापित है (इसे लिनक्स पर
sudo apt-get install libcurl4-openssl-devके माध्यम से स्थापित करें)। - एक CapSolver API कुंजी (नीचे दिए गए कोड में
"YourKey"को अपनी वास्तविक कुंजी से बदलें)।

यहाँ CapSolver का उपयोग करके ReCaptcha V3 को हल करने के लिए एक चरण-दर-चरण मार्गदर्शिका दी गई है:
चरण 1: कार्य बनाना
पहला चरण CapSolver की API को ReCaptcha को हल करने के लिए एक कार्य बनाने के लिए अनुरोध भेजना है। कार्य में वेबसाइट URL, साइट कुंजी (लक्ष्य पृष्ठ से), और विशिष्ट पृष्ठ क्रिया जैसे विवरण शामिल हैं।
cpp
#include <iostream>
#include <string>
#include <curl/curl.h>
#include <json/json.h>
const std::string CAPSOLVER_KEY = "YourKey";
const std::string PAGE_URL = "https://antcpt.com/score_detector";
const std::string PAGE_KEY = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf";
const std::string PAGE_ACTION = "homepage";
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;
}
std::string createTask(const std::string& url, const std::string& key, const std::string& action) {
CURL* curl;
CURLcode res;
std::string readBuffer;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://api.capsolver.com/createTask");
curl_easy_setopt(curl, CURLOPT_POST, 1L);
// JSON payload for task creation
Json::Value payload;
payload["clientKey"] = CAPSOLVER_KEY;
payload["task"]["type"] = "ReCaptchaV3TaskProxyLess";
payload["task"]["websiteURL"] = url;
payload["task"]["websiteKey"] = key;
payload["task"]["pageAction"] = action;
Json::StreamWriterBuilder writer;
std::string requestData = Json::writeString(writer, payload);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestData.c_str());
struct curl_slist* headers = nullptr;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
return readBuffer;
}
यह फ़ंक्शन आवश्यक कार्य विवरणों के साथ CapSolver API को एक POST अनुरोध भेजता है और प्रतिक्रिया देता है, जिसमें taskId शामिल होगा।
चरण 2: CAPTCHA समाधान प्राप्त करना
एक बार कार्य बनाए जाने के बाद, आपको कार्य का परिणाम प्राप्त करने के लिए CapSolver की API को क्वेरी करने की आवश्यकता होगी, जिसमें ReCaptcha चुनौती को बायपास करने के लिए टोकन शामिल है।
cpp
std::string getTaskResult(const std::string& taskId) {
CURL* curl;
CURLcode res;
std::string readBuffer;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://api.capsolver.com/getTaskResult");
curl_easy_setopt(curl, CURLOPT_POST, 1L);
// JSON payload to get the task result
Json::Value payload;
payload["clientKey"] = CAPSOLVER_KEY;
payload["taskId"] = taskId;
Json::StreamWriterBuilder writer;
std::string requestData = Json::writeString(writer, payload);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestData.c_str());
struct curl_slist* headers = nullptr;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
do {
readBuffer.clear();
res = curl_easy_perform(curl);
std::this_thread::sleep_for(std::chrono::seconds(5));
} while (readBuffer.find("\"status\":\"ready\"") == std::string::npos);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
return readBuffer;
}
यह फ़ंक्शन तैयार होने तक कार्य की स्थिति की बार-बार जाँच करता है, जिसके बाद यह ReCaptcha समाधान लौटाता है।
चरण 3: इसे एक साथ रखना
अंत में, यहाँ बताया गया है कि आप अपने मुख्य कोड में दोनों कार्यों को कैसे एकीकृत कर सकते हैं:
cpp
int main() {
std::cout << "Creating CAPTCHA task..." << std::endl;
std::string taskResponse = createTask(PAGE_URL, PAGE_KEY, PAGE_ACTION);
Json::CharReaderBuilder reader;
Json::Value jsonResponse;
std::string errors;
std::istringstream taskStream(taskResponse);
std::string taskId;
if (Json::parseFromStream(reader, taskStream, &jsonResponse, &errors)) {
taskId = jsonResponse["taskId"].asString();
std::cout << "Task ID: " << taskId << std::endl;
std::cout << "Retrieving CAPTCHA result..." << std::endl;
std::string resultResponse = getTaskResult(taskId);
Json::Value resultJson;
std::istringstream resultStream(resultResponse);
Json::parseFromStream(reader, resultStream, &resultJson, &errors);
std::string token = resultJson["solution"]["gRecaptchaResponse"].asString();
std::cout << "Token Solution: " << token << std::endl;
} else {
std::cerr << "Error parsing task response: " << errors << std::endl;
}
return 0;
}
यह कोड करेगा:
- CapSolver के माध्यम से एक ReCaptcha कार्य बनाएँ।
- कार्य पूरा होने तक प्रतीक्षा करें।
- ReCaptcha टोकन समाधान प्राप्त करें और उसे प्रिंट करें।
बोनस कोड
CapSolver: scrape पर शीर्ष कैप्चा समाधान के लिए अपना बोनस कोड का दावा करें। इसे रिडीम करने के बाद, आपको प्रत्येक रिचार्ज के बाद एक अतिरिक्त 5% बोनस मिलेगा, असीमित बार।

निष्कर्ष
libcurl के साथ, आप C++ अनुप्रयोगों में HTTP अनुरोधों को आसानी से संभाल सकते हैं। इसे CapSolver के साथ एकीकृत करके, आप ReCaptcha V3 जैसे कैप्चा को हल कर सकते हैं और अपने अनुरोधों में परिणाम का उपयोग कर सकते हैं।
अनुपालन अस्वीकरण: इस ब्लॉग पर प्रदान की गई जानकारी केवल सूचनात्मक उद्देश्यों के लिए है। CapSolver सभी लागू कानूनों और विनियमों का पालन करने के लिए प्रतिबद्ध है। CapSolver नेटवर्क का उपयोग अवैध, धोखाधड़ी या दुरुपयोग करने वाली गतिविधियों के लिए करना सख्त वर्जित है और इसकी जांच की जाएगी। हमारे कैप्चा समाधान उपयोगकर्ता अनुभव को बेहतर बनाने के साथ-साथ सार्वजनिक डेटा क्रॉलिंग के दौरान कैप्चा कठिनाइयों को हल करने में 100% अनुपालन सुनिश्चित करते हैं। हम अपनी सेवाओं के जिम्मेदार उपयोग की प्रोत्साहना करते हैं। अधिक जानकारी के लिए, कृपया हमारी सेवा की शर्तें और गोपनीयता नीति पर जाएं।
अधिक

CAPTCHA 2026 हल करने के लिए सबसे अच्छा एक्सटेंशन क्या है?
ऑनलाइन सुरक्षा की लगातार बदलती दुनिया में, कैप्चा चुनौतियां इंटरनेट उपयोगकर्ताओं के लिए एक सामान्य बाधा बन गई हैं।

Sora Fujimoto
12-Dec-2025

लुमिप्रॉक्सी: प्रीमियम प्रॉक्सी वेब स्क्रैपिंग एंड डेटा एकत्रीकरण के लिए
इस लेख में, हम आपको लुमीप्रॉक्सी क्या है और जो वे प्रदान करते हैं उन सेवाओं के बारे में बताएंगे।

Emma Foster
12-Dec-2025

Genlogin: आपके वेब ऑटोमेशन अनुभव को क्रांति लाओ
इस लेख में, हम आपको Genlogin क्या है और सेवाएं जो वे प्रदान करते हैं दिखाएंगे।

Aloísio Vítor
12-Dec-2025

प्रॉक्सीज.आईओ : किसी भी कार्य के लिए व्यक्तिगत प्रॉक्सी
इस लेख में, हम आपको दिखाएंगे कि Proxys.io क्या है और वे कौन सी सेवाएं प्रदान करते हैं।

Nikolai Smirnov
12-Dec-2025

टैबप्रॉक्सी: अच्छी कीमत विदेशी रिजिडेंशियल प्रॉक्सी
इस लेख में, हम आपको टैबप्रॉक्सी क्या है और वे क्या सेवाएं प्रदान करते हैं दिखाएंगे।

Rajinder Singh
12-Dec-2025

IP2World रिजिडेंशियल प्रॉक्सी: नेतृत्व कर रहे वैश्विक आईपी प्रॉक्सी समाधान
इस लेख में, हम आपको IP2World क्या है और वे कौन सी सेवाएं प्रदान करते हैं दिखाएंगे।

Ethan Collins
12-Dec-2025

