इस लेख में हमने आपकी सभी महत्वपूर्ण शंकाओं के जवाब देने की कोशिश की है। किसी भी समस्या को हल करना शुरू करने का पहला कदम यह तय करना है कि कौन-सा सुरक्षा सिस्टम उपयोग में है। इसके लिए आप लोकप्रिय कैप्चा और एंटी-बॉट सुरक्षा सिस्टमों की सूची देख सकते हैं, जहाँ ऐसे दृश्य उदाहरण और मुख्य संकेत दिए गए हैं जो यह जल्दी समझने में मदद करते हैं कि आप किस समाधान के साथ काम कर रहे हैं।
यदि आपको पता चलता है कि आपकी साइट पर TenDI (Tencent) उपयोग हो रहा है, तो अगला कदम इसके गुणों और काम करने के तरीके को और विस्तार से समझना है। इसी लेख में आप TenDI (Tencent) सिस्टम को जोड़ने (इंटीग्रेट करने) की निर्देशिका भी देख सकते हैं, ताकि आप पूरी तरह समझ सकें कि यह आपकी साइट पर कैसे काम करता है। इससे आप न केवल मौजूदा सुरक्षा को बेहतर ढंग से समझ पाएँगे, बल्कि उसकी सपोर्ट और रखरखाव की सही योजना भी बना सकेंगे।
API के माध्यम से CapMonster Cloud के साथ काम करने के सामान्य चरण:
type - CustomTask
class - TenDI
websiteURL - उस पृष्ठ का पता जहाँ कैप्चा हल किया जा रहा है।
websiteKey - captchaAppId। उदाहरण के लिए "websiteKey": "189123456" - आपकी साइट के लिए अद्वितीय पैरामीटर
captchaUrl (metadata के अंदर) - कैप्चा स्क्रिप्ट का लिंक। आमतौर पर TCaptcha.js या TCaptcha-global.js पर समाप्त होता है;
websiteURL - उस पृष्ठ का पता जहाँ कैप्चा हल किया जा रहा है;
userAgent (वैकल्पिक) - ब्राउज़र का User-Agent। केवल Windows से वास्तविक और अद्यतित UA भेजें ।
https://api.capmonster.cloud/createTask
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "TenDI",
"websiteURL": "https://example.com",
"websiteKey": "189123456",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
"metadata": {
"captchaUrl": "https://global.captcha.example.com/TCaptcha-global.js"
}
}
}
{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}
{
"errorId":0,
"status":"ready",
"solution": {
"data": {
"randstr": "@EcL",
"ticket": "tr03lHUhdnuW3neJZu.....7LrIbs*"
},
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
}
}
}
// npx playwright install chromium
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, TenDIRequest } from '@zennolab_com/capmonstercloud-client';
// अपने मानों से बदलें
const API_KEY = "YOUR_API_KEY";
const WEBSITE_URL = "https://example.com";
async function solveTenDIOnPage() {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
// 1. पृष्ठ खोलें
await page.goto(WEBSITE_URL, { waitUntil: 'networkidle' });
// 2. कैप्चा प्रकट होने का इंतजार करें (उदा. input या iframe)
await page.waitForSelector('#tendi_response, iframe[src*="tendi"], input[name="tendi_response"]', { timeout: 15000 });
// यदि आवश्यक हो, तो websiteKey सीधे पृष्ठ से निकाला जा सकता है
const WEBSITE_KEY = await page.evaluate(() => {
// उदाहरण: sitekey data-attribute या वैश्विक वेरिएबल में हो सकता है
const el = document.querySelector('#tendi_response') || document.querySelector('div[data-sitekey]');
return el?.getAttribute('data-sitekey') || window.TenDI_siteKey || "183268248";
});
console.log("Website key detected:", WEBSITE_KEY);
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// 3. TenDI टास्क बनाएं
const tenDIRequest = new TenDIRequest({
websiteURL: page.url(),
websiteKey: WEBSITE_KEY,
});
const balance = await client.getBalance();
console.log("Balance:", balance);
// 4. कैप्चा हल करें
const solution = await client.Solve(tenDIRequest);
console.log("Solution:", solution);
const { ticket, randstr } = solution.solution.data;
// 5. समाधान परिणाम डालने के तरीके
await page.evaluate(({ ticket, randstr }) => {
// input में डालें
const inputSelectors = ['#tendi_response', 'input[name="tendi_response"]', 'input[type="hidden"]'];
let inserted = false;
for (const sel of inputSelectors) {
const input = document.querySelector(sel);
if (input) {
input.value = ticket;
input.dispatchEvent(new Event('input', { bubbles: true }));
const form = input.closest('form');
if (form) form.submit();
inserted = true;
break;
}
}
// JS callback फ़ंक्शन
if (typeof window.onCaptchaSolved === 'function') {
window.onCaptchaSolved(ticket, randstr);
inserted = true;
}
// यदि कोई input या callback नहीं है
if (!inserted) {
window._tenDITicket = ticket;
window._tenDIRandStr = randstr;
console.log("Ticket and randstr saved to window._tenDITicket and window._tenDIRandStr");
}
}, { ticket, randstr });
await page.waitForTimeout(5000);
await browser.close();
}
solveTenDIOnPage().catch(console.error);
आपको दो पैरामीटर मिलेंगे: CaptchaAppId और AppSecretKey। इन्हें फ्रंटेंड और सर्वर पर उपयोग करेंगे।
क्लिक करने पर कैप्चा दिखाई देता है और हल होने के बाद परिणाम कंसोल में दिखता है।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Captcha Example</title>
// कैप्चा JS अनिवार्य रूप से लोड करना
<script src="https://ca.turing.captcha.qcloud.com/TJNCaptcha-global.js"></script>
</head>
<body>
<div id="cap_iframe"></div>
<button id="CaptchaId">Verification</button>
<script>
// परिणाम को प्रोसेस करना
function callback(res) {
console.log("callback:", res);
if (res.ret === 0) {
// सफल सत्यापन
const text = `[randstr] ${res.randstr} | [ticket] ${res.ticket}`;
const input = document.createElement("input");
input.value = text;
document.body.appendChild(input);
input.select();
document.execCommand("Copy");
document.body.removeChild(input);
alert("Ticket और randstr क्लिपबोर्ड में कॉपी किए गए।");
}
}
// कैप्चा स्क्रिप्ट लोड त्रुटियों को संभालना
function loadErrorCallback() {
const appid = "CaptchaAppId";
const ticket = `trerror_1001_${appid}_1769260382`;
callback({
ret: 0,
randstr: "@" + Math.random().toString(36).slice(2),
ticket,
errorCode: 1001,
errorMessage: "jsload_error",
});
}
window.onload = function () {
document.getElementById("CaptchaId").onclick = function () {
try {
const captcha = new TencentCaptcha(
document.getElementById("cap_iframe"),
"Your CaptchaAppId",
callback,
{}
);
captcha.show();
} catch (e) {
loadErrorCallback();
}
};
};
</script>
</body>
</html>
इंटीग्रेशन कैसे काम करता है
चरण 1: कैप्चा JS लोड करें
स्क्रिप्ट को डायनेमिक रूप से लोड करना चाहिए:
<script src="https://ca.turing.captcha.qcloud.com/TJNCaptcha-global.js"></script>यदि स्क्रिप्ट असामान्य तरीके से लोड हो या कैश किया जाए, तो कैप्चा सही से काम नहीं कर सकता।
चरण 2: TencentCaptcha ऑब्जेक्ट बनाएं
JS लोड होने के बाद एक ग्लोबल क्लास उपलब्ध होता है:
<script src="new TencentCaptcha(domElement, CaptchaAppId, callback, options);"></script>पैरामीटर:
domElement - कंटेनर जहाँ चेकबॉक्स/iframe एम्बेड किया गया है
CaptchaAppId - आपका ID
callback - सत्यापन के बाद क्या करना है
options - दृश्य सेटिंग्स (ऑप्शनल)
चरण 3: मेथड कॉल करें .show()
captcha.show();कैप्चा दिखाता है। इसे कई बार कॉल किया जा सकता है।
चरण 4: परिणाम प्रोसेस करें
Callback ऑब्जेक्ट प्राप्त करता है:
{
ret: 0, // 0 -- सफलता, 2 -- उपयोगकर्ता ने विंडो बंद की
ticket: "...", // सर्वर को चाहिए
randstr: "...", // सर्वर को भी चाहिए
errorCode: 1001, // यदि कैप्चा लोड नहीं हुआ
errorMessage: "..." // त्रुटि संदेश
}सर्वर पर हमेशा ticket की द्वितीयक जांच करें।
"आपातकालीन मोड" (Disaster Recovery)
यदि कैप्चा लोड नहीं हुआ (उदा. CDN अनुपलब्ध), तो 'आपातकालीन टिकट' स्वचालित रूप से जारी किया जा सकता है ताकि व्यवसाय प्रक्रिया बाधित न हो।
परिदृश्य:
trerror_<errorcode>_<appid>_<timestamp>AppId एन्क्रिप्शन (वैकल्पिक)
यदि अधिकतम सुरक्षा आवश्यक है, तो कैप्चा को खुला AppId भेजने के बजाय इसका एन्क्रिप्टेड संस्करण भेज सकते हैं:
aidEncrypted = Base64(IV + AES256(AppId & timestamp & ttl))आवश्यक है:
सर्वर-साइड एन्क्रिप्शन उदाहरण (Python)
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
def encrypt(plaintext, key, iv):
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(plaintext.encode(), AES.block_size))
return base64.b64encode(iv + ciphertext).decode("utf-8")सर्वर-साइड सत्यापन
चरण 1. API एक्सेस सेटअप करें
अपने कुंजी प्रबंधन पैनल (CAM / API Key Management) में SecretId और SecretKey प्राप्त करें। ये API साइन की गई रिक्वेस्ट के लिए आवश्यक हैं।
चरण 2. API DescribeCaptchaResult कॉल करें
क्लाइंट से ticket और randstr लौटने के बाद, सर्वर को अनुरोध भेजना चाहिए:
पैरामीटर:
CaptchaType - 9 (स्थिर मान)
Ticket - स्ट्रिंग — ticket, क्लाइंट से लौटा
Randstr - स्ट्रिंग — randstr, क्लाइंट से लौटा
CaptchaAppId - आपका AppId
AppSecretKey - आपकी SecretKey
UserIp - उपयोगकर्ता IP (अनुशंसित)
चरण 3. प्रतिक्रिया प्रोसेस करें
API लौटाएगा:
यदि CaptchaCode === OK, उपयोगकर्ता को सत्यापित माना जाता है। अन्यथा — अस्वीकार करें।
उदाहरण — Node.js में ticket सत्यापन
import { v20190722 as captcha } from "@tencentcloud/tencentcloud-sdk-nodejs";
const client = new captcha.Client({
credential: {
secretId: "YOUR_SECRET_ID",
secretKey: "YOUR_SECRET_KEY"
},
region: "ap-project", // क्षेत्र, यदि आवश्यक हो
});
async function verifyCaptcha(ticket, randstr, userIp) {
const params = {
CaptchaType: 9,
Ticket: ticket,
Randstr: randstr,
CaptchaAppId: YOUR_APP_ID,
AppSecretKey: "YOUR_APP_SECRET_KEY",
UserIp: userIp
};
const resp = await client.DescribeCaptchaResult(params);
const code = resp.Response.CaptchaCode;
return code === 0;
}Tencent CAPTCHA को अपनी साइट से जोड़ने के बारे में अधिक जानकारी आप आधिकारिक दस्तावेज़ में पा सकते हैं।
अगर आपके पास ऐसा साइट आया है, जिस पर पहले से ही कोई कैप्चा या अन्य सुरक्षा प्रणाली लगी हुई है और आपके पास कोड तक पहुंच नहीं है — तो घबराने की ज़रूरत नहीं है! यह पता लगाना काफ़ी आसान है कि वास्तव में कौन-सी तकनीक इस्तेमाल हो रही है। काम की सही जाँच के लिए आप अलग-थलग टेस्ट वातावरण में CapMonster Cloud पहचान सेवा का उपयोग कर सकते हैं, ताकि यह सुनिश्चित हो सके कि टोकन प्रोसेसिंग का मेकैनिज़्म और वेरिफिकेशन लॉजिक ठीक तरह से काम कर रहे हैं।
TenDI (Tencent) के मामले में सिस्टम की पहचान करना, उसके व्यवहार का विश्लेषण करना और यह सुनिश्चित करना ही काफ़ी है कि सुरक्षा सही तरीके से काम कर रही है। इस लेख में हमने दिखाया है कि TenDI (Tencent) को कैसे पहचाना जाए और इसे जोड़ने या दोबारा कॉन्फ़िगर करने की निर्देशिका कहाँ मिलेगी, ताकि आप आत्मविश्वास के साथ सुरक्षा को बनाए रख सकें और इसके काम को नियंत्रित कर सकें।