वेब स्क्रैपिंग के लिए 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% अनुपालन सुनिश्चित करते हैं। हम अपनी सेवाओं के जिम्मेदार उपयोग की प्रोत्साहना करते हैं। अधिक जानकारी के लिए, कृपया हमारी सेवा की शर्तें और गोपनीयता नीति पर जाएं।
अधिक

क्लाउडफ़्लेयर त्रुटि 1006, 1007, 1008 हल करने का समाधान | कैसे ठीक करें
क्लाउडफ़ेयर त्रुटि 1006, 1007 या 1008 के साथ परेशान हैं? इन एक्सेस अस्वीकृतियों को हल करने और अपने वेब क्रॉलिंग अनुभव को बढ़ाने के लिए व्यावहारिक समाधान सीखें।

Nikolai Smirnov
05-Dec-2025

एआई-एलएलएम: जोखिम नियंत्रण छवि संज्ञान और कैप्चा हल करने के लिए भविष्य का समाधान
एक गहरा अध्ययन कैसे बड़े भाषा मॉडल ग्राफिकल कैप्चा हल करते हैं, शून्य-शॉट तर्क और CNN की यथार्थता के संयोजन के माध्यम से आधुनिक जोखिम नियंत्रण के लिए।

Rajinder Singh
05-Dec-2025

कैप्चा कैसे हल करें जब वेब स्क्रैपिंग करते हैं Scrapling और CapSolver के साथ
स्क्रैपलिंग + कैपसॉल्वर रीकैपचा v2/v3 और क्लाउडफ़्लेयर टर्नस्टाइल बायपास के साथ स्वचालित स्क्रैपिंग सक्षम करता है।

Rajinder Singh
05-Dec-2025

यूजर-एजेंट बदलें | सेलेनियम में चरण एवं शीर्ष विधियां
Selenium में User Agent बदलना बहुत सारे वेब स्क्रैपिंग कार्यों के लिए एक महत्वपूर्ण कदम है। यह ऑटोमेशन स्क्रिप्ट को एक सामान्य ब्राउज़र के रूप में छिपाने में मदद करता है...

Lucas Mitchell
05-Dec-2025

कैसे पहचानें कि `कार्य` क्लाउडफ़ेयर टर्नस्टाइल को हल करने के लिए आवश्यक है कैपसॉल्वर एक्सटेंशन के साथ
क्लाउडफ़्लेयर टर्नस्टाइल प्रभावी कैप्चा हल करने के लिए कार्रवाई की पहचान सीखें। Capsolver के उपकरणों और तकनीकों का उपयोग करने के लिए हमारे चरण-दर-चरण गाइड का अनुसरण करें।

Rajinder Singh
05-Dec-2025

9Proxy की शक्ति की खोज करें: व्यापक समीक्षा
इस लेख में, हम आपको 9proxy क्या है और जो वे प्रदान करते हैं सेवाएं दिखाएंगे।

Rajinder Singh
04-Dec-2025

