Express में CAPTCHA सॉल्वर का उपयोग करें
solvethree क्लाइंट को अपने Express सर्वर पर रखें। टास्क बनाने के लिए प्रमाणीकरण वाला POST रूट और उसे प्राप्त करने के लिए GET रूट इस्तेमाल करें। सर्वर कॉन्फ़िगरेशन में लक्ष्य और प्रॉक्सी निश्चित रखें, ताकि कॉलर एंडपॉइंट को मनचाहे सशुल्क रिले में न बदल सकें।
इस पेज पर
सर्वर और टार्गेट कॉन्फ़िगर करें
Node.js 22 या बाद का संस्करण और Express 5 इस्तेमाल करें। यह मानने के बजाय कि आधिकारिक JavaScript SDK npm रजिस्ट्री में प्रकाशित है, उसे दस्तावेज़ों में दिए गए tarball इंस्टॉलेशन से इंस्टॉल करें। उदाहरण में हैंडलर के बाहर एक Solvethree क्लाइंट बनाया जाता है।
SOLVETHREE_API_KEY: आपके वर्कस्पेस की API कुंजी। इसे सर्वर पर रखें।INTEGRATION_KEY: भरोसेमंद आंतरिक कॉलर के लिए अलग सीक्रेट। उदाहरण में यहx-integration-keyहेडर में आवश्यक है; इसे ब्राउज़र क्लाइंट को न दें। यदि आपके पास पहले से प्रमाणीकरण मिडलवेयर है, तो उदाहरण के साझा कुंजी वाले गार्ड के बजाय उसे इस्तेमाल करें।CAPTCHA_SITE: लक्ष्य का होस्टनाम, पूर्ण URL नहीं। टास्क बनाने से पहले अपने वर्कस्पेस के लिए सक्रिय साइट प्रोफ़ाइल सेट करें; होस्टनाम भेजने से प्रोफ़ाइल नहीं बनती।SOLVETHREE_PROXY: इस लक्ष्य के लिए प्रॉक्सी। उदाहरण में एक ही प्रॉक्सी दी जाती है और ऐक्शनloginपर निश्चित रहता है। यदि आपका लक्ष्य कोई दूसरा ऐक्शन इस्तेमाल करता है, तो उसे सर्वर पर बदलें।
यह अनुरोध डिफ़ॉल्ट reCAPTCHA Enterprise कॉन्फ़िगरेशन इस्तेमाल करता है। इसके लिए site, action और प्रॉक्सी आवश्यक हैं—type या url नहीं। यदि लक्ष्य अभी कॉन्फ़िगर नहीं है, तो साइट प्रोफ़ाइल सेटअप देखें।
एक बार बनाएँ, फिर टास्क प्राप्त करें
// npm install express and the official solvethree SDK tarball.
import express from 'express';
import { Solvethree, SolvethreeError } from '@solvethree/sdk';
const app = express();
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const secret = process.env.INTEGRATION_KEY;
if (!secret) throw new Error('Set INTEGRATION_KEY');
app.use((request, response, next) => {
if (request.get('x-integration-key') !== secret) return response.sendStatus(401);
next();
});
app.post('/captcha/tasks', async (request, response) => {
const task = await client.createTask({
site: process.env.CAPTCHA_SITE, action: 'login', proxy: process.env.SOLVETHREE_PROXY,
requestId: request.get('x-request-id'),
}, { waitMs: 0, signal: AbortSignal.timeout(20000) });
response.json(task);
});
app.get('/captcha/tasks/:id', async (request, response) => {
response.json(await client.getTask(request.params.id, { waitMs: 15000, signal: AbortSignal.timeout(25000) }));
});
app.use((error, request, response, next) => {
if (error instanceof SolvethreeError) return response.status(502).json({ requestId: error.requestId, taskId: error.taskId });
response.status(400).json({ error: 'Invalid task input or ID' });
});
app.listen(3000);दोनों रूट प्रमाणीकरण गार्ड से सुरक्षित हैं। POST हैंडलर होस्टनाम, ऐक्शन और प्रॉक्सी को अनुरोध बॉडी से नहीं, बल्कि सर्वर कॉन्फ़िगरेशन से लेता है। कॉलर से केवल वैकल्पिक निर्माण पहचानकर्ता लिया जाता है।
- 1.
निर्माण से पहले अनुरोध ID तय करें
1–64 ASCII अक्षर, अंक, अंडरस्कोर या हाइफ़न वाला
x-request-idभेजें। इसे तार्किक अनुरोध के साथ रखें, ताकि कनेक्शन टाइम आउट होने पर निर्माण का परिणाम पुनः प्राप्त कर सकें। - 2.
/captcha/tasksपर एक बार POST करेंहैंडलर
waitMs: 0के साथcreateTaskकॉल करता है और टास्क लौटाता है। उसकी ID रखें। सफल प्रतिक्रिया का मतलब है कि आपके पास टास्क है, यह ज़रूरी नहीं कि समाधान भी हो। - 3.
GET से स्थिति प्राप्त करें
/captcha/tasks/:idकॉल करें। स्थितिpendingयाsolvingरहने तक प्राप्त करते रहें; प्रगति जाँचने के लिए POST न दोहराएँ।readyयाfailedपर रुकें। - 4.
केवल तैयार समाधान इस्तेमाल करें
उसी कॉन्फ़िगर की गई प्रॉक्सी और इच्छित लक्ष्य का इस्तेमाल करते हुए, लौटाए गए
userAgentतथाsecChUaके साथ टोकन सबमिट करें। SDK आपकी ओर से इसे सबमिट नहीं करता। टास्क तैयार होने का मतलब है कि समाधान जनरेट हुआ है, यह नहीं कि लक्ष्य ने आपका एप्लिकेशन अनुरोध स्वीकार कर लिया।
दूसरा टास्क बनाए बिना टाइमआउट सँभालें
POST SDK कॉल में AbortSignal की समय-सीमा 20 सेकंड है। GET में SDK कॉल की 25 सेकंड की समय-सीमा के भीतर टास्क के लिए 15 सेकंड तक प्रतीक्षा की अनुमति है। GET प्रतिक्रिया फिर भी गैर-अंतिम हो सकती है; प्रतीक्षा समाप्त होने को हल करने का विफल प्रयास मानने के बजाय उसकी स्थिति जाँचें।
निर्माण का टाइमआउट यह साबित नहीं करता कि solvethree ने अनुरोध अस्वीकार कर दिया। यदि आपको टास्क ID मिली है, तो उसे प्राप्त करें। अन्यथा, मौजूदा टास्क पुनः प्राप्त करने के लिए उसी अनुरोध ID और बिना बदले टास्क इनपुट के साथ निर्माण दोहराएँ। अलग इनपुट के साथ उसी ID का दोबारा इस्तेमाल करने से कॉन्फ़्लिक्ट होता है। सहेजी गई अनुरोध ID के बिना नया POST अलग काम बना सकता है।
Express 5 अस्वीकार हुए async हैंडलर को त्रुटि मिडलवेयर तक भेजता है। उदाहरण में SolvethreeError के लिए HTTP 502 लौटाया जाता है और केवल उसके अनुरोध व टास्क पहचानकर्ता उजागर किए जाते हैं—मूल त्रुटि, क्रेडेंशियल या समाधान नहीं। इसका फ़ॉलबैक HTTP 400 सामान्य है; यह समय-सीमा संबंधी त्रुटियों सहित हर गैर-SDK त्रुटि का सटीक वर्गीकरण नहीं करता।
सफलता पेलोड पढ़ने से पहले HTTP त्रुटियाँ सँभालें। अलग से, प्राप्त किए गए टास्क की स्थिति failed हो सकती है: उसके errorCode और error जाँचें, फिर पोलिंग बंद करें। हल करने के विफल प्रयासों का शुल्क वापस कर दिया जाता है, लेकिन अमान्य इनपुट को बिना बदले दोबारा भेजने से वे ठीक नहीं होंगे। रिपोर्ट की गई विफलता का निदान करने के लिए API त्रुटि संदर्भ इस्तेमाल करें।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।