Node.js से reCAPTCHA Enterprise हल करें
Node.js 22+ पर आधिकारिक solvethree JavaScript SDK इस्तेमाल करें। सक्रिय साइट प्रोफ़ाइल कॉन्फ़िगर करें, साइट का होस्टनाम और ऐक्शन दें और प्रॉक्सी के ज़रिए हल करें। SDK टोकन और ब्राउज़र पहचान लौटाता है; आपका एप्लिकेशन उन्हें लक्ष्य पर सबमिट करता है।
इस पेज पर
SDK इंस्टॉल करें और साइट कॉन्फ़िगर करें
आधिकारिक पैकेज सीधे solvethree.com से इंस्टॉल करें:
npm install https://solvethree.com/downloads/solvethree-sdk-0.1.0.tgz- 1.
साइट प्रोफ़ाइल सक्रिय करें
कंसोल में लक्ष्य साइट सेट अप करें और सुनिश्चित करें कि उसकी प्रोफ़ाइल सक्रिय है और आपके वर्कस्पेस के लिए उपलब्ध है। होस्टनाम और ऐक्शन भेजने से प्रोफ़ाइल नहीं बनती। साइट प्रोफ़ाइल सेटअप देखें।
- 2.
सर्वर एनवायरनमेंट सेट करें
Node.js प्रोसेस के एनवायरनमेंट में SOLVETHREE_API_KEY को अपनी वर्कस्पेस API कुंजी और SOLVETHREE_PROXY को अपने प्रॉक्सी URL पर सेट करें। API कुंजी सर्वर पर रखें; उसे ब्राउज़र कोड में उजागर न करें।
- 3.
स्क्रिप्ट तैयार करें
अगला उदाहरण solve.mjs के रूप में सेव करें। accounts.example.com की जगह अपना कॉन्फ़िगर किया गया होस्टनाम और login की जगह पेज का वास्तविक reCAPTCHA ऐक्शन डालें।
Enterprise टोकन का अनुरोध करें
site के लिए होस्टनाम इस्तेमाल करें, पेज URL नहीं। reCAPTCHA में डिफ़ॉल्ट रूप से enterprise-v3 इस्तेमाल होता है, इसलिए उदाहरण में recaptchaType की ज़रूरत नहीं है। type या url न जोड़ें। अनुरोध में proxy या proxyCandidates में से ठीक एक होना ज़रूरी है; यह उदाहरण एक प्रॉक्सी इस्तेमाल करता है।
import { randomUUID } from 'node:crypto';
import { Solvethree, SolvethreeError, TaskFailedError } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const request = {
site: 'accounts.example.com', // Use your configured hostname.
action: 'login', // Use the page's actual action.
proxy: process.env.SOLVETHREE_PROXY,
requestId: randomUUID(),
};
let result;
try {
result = await client.solve(request, { timeoutMs: 180_000 });
} catch (error) {
if (error instanceof TaskFailedError) {
throw new Error(`Task failed: ${error.errorCode}`);
}
if (error instanceof SolvethreeError) {
// Save these IDs; use them to recover the existing task.
console.error({ requestId: error.requestId, taskId: error.taskId });
}
throw error;
}
const { token, userAgent, secChUa } = result.solution;
console.log('Ready task:', result.id); // Keep solution credentials private.एनवायरनमेंट वेरिएबल सेट करने के बाद स्क्रिप्ट को Node.js से चलाएँ। solve टास्क एक बार बनाता है और उसके तैयार होने या अपवाद आने तक पोलिंग करता है। 180,000 ms का टाइमआउट क्लाइंट के इंतज़ार की अवधि सीमित करता है।
लौटाए गए फ़ील्ड के काम अलग-अलग हैं:
result.idटास्क की पहचान करता है। यह CAPTCHA टोकन नहीं है।result.solution.tokenवह मान है जिसे एप्लिकेशन के CAPTCHA फ़ील्ड में सबमिट करना है।result.solution.userAgentऔरresult.solution.secChUaउस टोकन के साथ इस्तेमाल की जाने वाली ब्राउज़र पहचान हैं।
समाधान के मान निजी रखें। अगर आपको प्रोसेस रीस्टार्ट के बाद प्रक्रिया बहाल करनी है, तो solve कॉल करने से पहले requestId और सटीक टास्क इनपुट सेव करें और प्रॉक्सी क्रेडेंशियल सुरक्षित रखें।
उसी प्रॉक्सी से सबमिट करें
solve के लौटने के बाद उसी स्क्रिप्ट में आगे बढ़ें। यह उदाहरण undici इस्तेमाल करता है, जिसे इसकी टिप्पणी में बताए अनुसार अलग से इंस्टॉल करना होगा। यह request.proxy के ज़रिए टोकन भेजता है और लौटाए गए दोनों ब्राउज़र पहचान फ़ील्ड इस्तेमाल करता है।
// Continue after client.solve(). Install undici separately: npm install undici@7.
import { fetch, ProxyAgent } from 'undici';
const dispatcher = new ProxyAgent(request.proxy);
try {
// Replace the URL and form fields with your application's contract.
const response = await fetch('https://accounts.example.com/login', {
method: 'POST',
dispatcher,
redirect: 'manual',
headers: {
'user-agent': result.solution.userAgent,
'sec-ch-ua': result.solution.secChUa,
},
body: new URLSearchParams({
'g-recaptcha-response': result.solution.token,
}),
signal: AbortSignal.timeout(30_000),
});
console.log('Application HTTP status:', response.status);
await response.arrayBuffer();
} finally {
await dispatcher.close();
}URL और फ़ॉर्म फ़ील्ड की जगह अपने एप्लिकेशन के विनिर्देश के अनुसार मान डालें। उदाहरण केवल g-recaptcha-response देता है; एप्लिकेशन के लिए ज़रूरी अन्य सभी फ़ील्ड और सेशन डेटा शामिल करें। लक्ष्य को उसी साइट और ऐक्शन के अनुरूप रखें जिसके लिए आपने हल प्राप्त किया है।
चूँकि हल करने का अनुरोध एक प्रॉक्सी इस्तेमाल करता है, इसलिए request.proxy दोबारा इस्तेमाल करने से सबमिशन उसी प्रॉक्सी पर रहता है। अगर आप अनुरोध को proxyCandidates इस्तेमाल करने के लिए बदलते हैं, तो सफल प्रॉक्सी चुनने के लिए SDK का successfulProxy हेल्पर इस्तेमाल करें।
टास्क तैयार होने का मतलब है कि समाधान बन गया है, न कि लक्ष्य ने आपके एप्लिकेशन अनुरोध को स्वीकार कर लिया है। सफलता की वास्तविक शर्त के लिए लक्ष्य का रिस्पॉन्स जाँचें; HTTP स्टेटस प्रिंट करना काफ़ी नहीं है। अस्वीकृति के निदान के लिए तैयार टोकन अस्वीकृत होने पर देखें।
विफलताएँ सँभालें और बाधित अनुरोध बहाल करें
हल करने का उदाहरण अंतिम टास्क विफलताओं को अन्य SDK त्रुटियों से अलग रखता है। यह अंतर बनाए रखें: विफल टास्क और विफल HTTP अनुरोध को अलग-अलग तरीके से सँभालना होता है।
- solve से TaskFailedError आता है
अपवाद में errorCode और taskId शामिल होते हैं। अगर आपको त्रुटि टेक्स्ट सहित विफल टास्क का पूरा रिस्पॉन्स चाहिए, तो getTask(taskId) कॉल करें।
यह आज़माएँ: उस टास्क की पोलिंग बंद करें और दूसरा बनाने से पहले बताए गए कारण को दूर करें। अमान्य इनपुट बदले बिना दोबारा कोशिश न करें।
- SolvethreeError में taskId शामिल है
SDK के पास मौजूदा टास्क की ID है।
यह आज़माएँ: getTask से पोलिंग फिर शुरू करें। pending या solving होने पर जारी रखें, ready होने पर ही समाधान इस्तेमाल करें और failed पर रुक जाएँ।
- टास्क बनाते समय प्रक्रिया बाधित हुई और केवल requestId उपलब्ध है
कनेक्शन टाइमआउट होने से यह साबित नहीं होता कि टास्क नहीं बना था।
यह आज़माएँ: बिल्कुल वही टास्क इनपुट और वही requestId देकर createTask से प्रक्रिया बहाल करें। अलग इनपुट के साथ वही ID दोबारा इस्तेमाल करने पर टकराव होता है।
- API किसी HTTP अनुरोध को अस्वीकार करता है
रिस्पॉन्स को तैयार या विफल टास्क मानने के बजाय ApiError में उपलब्ध HTTP स्टेटस जाँचें।
यह आज़माएँ: सफलता का पेलोड प्रोसेस करने से पहले HTTP त्रुटि दूर करें। यह न मानें कि हर विफलता अपर्याप्त क्रेडिट के कारण होती है।
नमूना हर बार प्रोग्राम शुरू होने पर नया requestId बनाता है। इसे बिना बदलाव के दोबारा चलाना बहाली नहीं है: इसके बजाय अपने सेव किए गए अनुरोध और ID इस्तेमाल करें। SDK टास्क बनाने की कोशिश कभी अपने-आप दोबारा नहीं करता; हल करने की समय-सीमा के भीतर पोलिंग में अस्थायी विफलताओं के लिए वह Retry-After का पालन करता है।
पोलिंग और इंतज़ार की स्पष्ट सेटिंग के लिए टास्क पोलिंग और टाइमआउट देखें।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।