इस लेख में हमने आपकी सभी महत्वपूर्ण शंकाओं के जवाब देने की कोशिश की है। किसी भी समस्या को हल करना शुरू करने का पहला कदम यह तय करना है कि कौन-सा सुरक्षा सिस्टम उपयोग में है। इसके लिए आप लोकप्रिय कैप्चा और एंटी-बॉट सुरक्षा सिस्टमों की सूची देख सकते हैं, जहाँ ऐसे दृश्य उदाहरण और मुख्य संकेत दिए गए हैं जो यह जल्दी समझने में मदद करते हैं कि आप किस समाधान के साथ काम कर रहे हैं।
यदि आपको पता चलता है कि आपकी साइट पर ComplexImage उपयोग हो रहा है, तो अगला कदम इसके गुणों और काम करने के तरीके को और विस्तार से समझना है। इसी लेख में आप ComplexImage सिस्टम को जोड़ने (इंटीग्रेट करने) की निर्देशिका भी देख सकते हैं, ताकि आप पूरी तरह समझ सकें कि यह आपकी साइट पर कैसे काम करता है। इससे आप न केवल मौजूदा सुरक्षा को बेहतर ढंग से समझ पाएँगे, बल्कि उसकी सपोर्ट और रखरखाव की सही योजना भी बना सकेंगे।
API के माध्यम से CapMonster Cloud के साथ काम करने के सामान्य चरण:
type - ComplexImageTask
class - recognition
imagesBase64 - Base64 फॉर्मेट में छवियों की एरे। उदाहरण: [“/9j/4AAQSkZJRgABAQEAAAAAAAD…”];
Task (metadata के अंदर) - टास्क का नाम (उदा. dli).
https://api.capmonster.cloud/createTask{
"clientKey": "API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"base64"
],
"metadata": {
"Task": "dli" // अपनी ज़रूरत के अनुसार टास्क बदलें, उपलब्ध मॉड्यूल की सूची https://docs.capmonster.cloud/docs/captchas/ComplexImageTask-Recognition/ पर देखें
}
}
}
{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}
{
"solution":
{
"answer": "1",
"metadata": {
"AnswerType": "Text"
}
},
"cost": 0.0003,
"status": "ready",
"errorId": 0,
"errorCode": null,
"errorDescription": null
}
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, ComplexImageTaskRecognitionRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = "YOUR_API_KEY";
const TARGET_URL = "https://example.com/captcha-page";
async function solveComplexImageTaskPlaywright() {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
await page.goto(TARGET_URL);
// CAPTCHA इमेज को ढूँढें
const captchaHandle = await page.$('#captcha'); // असली सेलेक्टर डालें
const captchaBase64 = await captchaHandle.evaluate(img => {
const canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
return canvas.toDataURL('image/png').split(',')[1];
});
console.log("Captcha base64:", captchaBase64.substring(0, 50) + "...");
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// CAPTCHA को पहचान के लिए भेजें
const citRecognitionRequest = new ComplexImageTaskRecognitionRequest({
imagesBase64: [captchaBase64],
metaData: { Task: 'oocl_rotate' } // अपने CAPTCHA प्रकार को बदलें
});
const result = await cmcClient.Solve(citRecognitionRequest);
console.log("Solution received:", result);
// हल की प्रक्रिया
const solution = result.solution;
if (!solution) {
console.error("No solution received");
return;
}
if (solution.metadata?.AnswerType === "Coordinate") {
// कोऑर्डिनेट CAPTCHA
const box = await captchaHandle.boundingBox();
for (const point of solution.answer) {
const clickX = box.x + point.X;
const clickY = box.y + point.Y;
console.log(`Clicking at: (${clickX}, ${clickY})`);
await page.mouse.click(clickX, clickY);
}
} else if (solution.metadata?.AnswerType === "Grid") {
// ग्रिड CAPTCHA (true/false एरे)
const box = await captchaHandle.boundingBox();
const gridItems = await page.$$('#captcha_grid div'); // ग्रिड एलिमेंट के सेलेक्टर्स बदलें
const answers = solution.answer;
for (let i = 0; i < answers.length; i++) {
if (answers[i] && gridItems[i]) {
const itemBox = await gridItems[i].boundingBox();
const clickX = itemBox.x + itemBox.width / 2;
const clickY = itemBox.y + itemBox.height / 2;
console.log(`Clicking grid item ${i} at: (${clickX}, ${clickY})`);
await page.mouse.click(clickX, clickY);
}
}
} else {
console.warn("Unknown captcha solution type:", solution.metadata?.AnswerType);
}
// कन्फ़र्मेशन बटन पर क्लिक करें (यदि मौजूद हो)
await page.click('#submit_button'); // असली बटन सेलेक्टर डालें
console.log("Captcha solved.");
}
solveComplexImageTaskPlaywright().catch(console.error);
1. सर्वर पर CAPTCHA बनाना।
2. CAPTCHA क्लाइंट को भेजना
<!--इमेज ग्रिड CAPTCHA-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Grid CAPTCHA Demo</title>
<style>
#captchaGrid {
display: grid;
grid-template-columns: repeat(3, 100px);
grid-gap: 10px;
margin-bottom: 10px;
}
.grid-item {
width: 100px;
height: 100px;
background-color: #eee;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
border: 2px solid transparent;
}
.grid-item.selected {
border-color: blue;
}
</style>
</head>
<body>
<h1>Grid CAPTCHA Demo</h1>
<div id="captchaGrid"></div>
<button id="submitBtn">Submit</button>
<button id="refreshBtn">Refresh CAPTCHA</button>
<p id="result"></p>
<script>
let captchaId;
let answers = []; // क्लिक्स के लिए true/false एरे
async function loadCaptcha() {
const res = await fetch('/captcha'); // सर्वर JSON भेजेगा: captchaId और Base64 इमेज एरे
const data = await res.json();
captchaId = data.captchaId;
answers = new Array(data.images.length).fill(false);
const grid = document.getElementById('captchaGrid');
grid.innerHTML = '';
data.images.forEach((imgBase64, i) => {
const div = document.createElement('div');
div.className = 'grid-item';
div.style.backgroundImage = `url('data:image/png;base64,${imgBase64}')`;
div.style.backgroundSize = 'cover';
div.addEventListener('click', () => {
answers[i] = !answers[i];
div.classList.toggle('selected', answers[i]);
});
grid.appendChild(div);
});
document.getElementById('result').textContent = '';
}
document.getElementById('refreshBtn').addEventListener('click', loadCaptcha);
document.getElementById('submitBtn').addEventListener('click', async () => {
const res = await fetch('/captcha/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ captchaId, answer: answers })
});
const data = await res.json();
document.getElementById('result').textContent = data.success ? 'Captcha passed!' : 'Captcha failed, try again.';
if (!data.success) loadCaptcha();
});
// CAPTCHA लोड करना शुरू में
loadCaptcha();
</script>
</body>
</html>
3. उपयोगकर्ता द्वारा उत्तर देना
4. उत्तर सर्वर को भेजना:
5. सर्वर पर जांच
<?php
session_start();
// CAPTCHA TTL (सेकंड में)
define('CAPTCHA_TTL', 300); // 5 मिनट
// यादृच्छिक इमेज बनाना
function generateCaptchaImage($text = null) {
$width = 100;
$height = 100;
if (!$text) {
$text = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 2);
}
$image = imagecreatetruecolor($width, $height);
// बैकग्राउंड
$bgColor = imagecolorallocate($image, rand(180, 255), rand(180, 255), rand(180, 255));
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);
// टेक्स्ट
$textColor = imagecolorallocate($image, 0, 0, 0);
$fontSize = 15;
$fontFile = __DIR__ . '/Arial.ttf'; // TTF फ़ॉन्ट पथ
if (file_exists($fontFile)) {
imagettftext($image, $fontSize, rand(-20,20), 10, 50, $textColor, $fontFile, $text);
} else {
imagestring($image, 5, 10, 40, $text, $textColor);
}
ob_start();
imagepng($image);
$imgData = ob_get_clean();
imagedestroy($image);
return base64_encode($imgData);
}
// ग्रिड CAPTCHA बनाना
function generateGridCaptcha() {
$numImages = 9; // 3x3
$images = [];
$solution = [];
for ($i = 0; $i < $numImages; $i++) {
// यादृच्छिक हल, सही इमेज या नहीं (उदाहरण)
$isCorrect = rand(0,1) === 1;
$solution[] = $isCorrect;
// इमेज जनरेट करें (वास्तविक CAPTCHA में ऑब्जेक्ट जोड़ सकते हैं)
$text = $isCorrect ? 'OK' : 'NO';
$images[] = generateCaptchaImage($text);
}
return ['images' => $images, 'solution' => $solution];
}
// CAPTCHA जनरेशन एंडपॉइंट
if ($_SERVER['REQUEST_METHOD'] === 'GET' && $_SERVER['REQUEST_URI'] === '/captcha') {
$captchaId = uniqid('captcha_', true);
$gridCaptcha = generateGridCaptcha();
$_SESSION['captchas'][$captchaId] = [
'solution' => $gridCaptcha['solution'],
'timestamp' => time()
];
header('Content-Type: application/json');
echo json_encode([
'captchaId' => $captchaId,
'images' => $gridCaptcha['images']
]);
exit;
}
// CAPTCHA वेरिफिकेशन एंडपॉइंट
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['REQUEST_URI'] === '/captcha/verify') {
$data = json_decode(file_get_contents('php://input'), true);
$captchaId = $data['captchaId'] ?? '';
$answer = $data['answer'] ?? [];
if (!isset($_SESSION['captchas'][$captchaId])) {
echo json_encode(['success' => false, 'message' => 'Captcha expired or not found']);
exit;
}
$captcha = $_SESSION['captchas'][$captchaId];
// TTL चेक
if (time() - $captcha['timestamp'] > CAPTCHA_TTL) {
unset($_SESSION['captchas'][$captchaId]);
echo json_encode(['success' => false, 'message' => 'Captcha expired']);
exit;
}
// true/false एरे चेक
$success = $captcha['solution'] === $answer;
// जांच के बाद CAPTCHA हटाएं
unset($_SESSION['captchas'][$captchaId]);
echo json_encode(['success' => $success]);
exit;
}
// 404
http_response_code(404);
echo 'Not found';
6. आगे की कार्रवाई
अतिरिक्त
लोड टेस्ट करें (k6 या JMeter) — ज्यादा रिक्वेस्ट पर:
यदि आप ऐसे साइट पर हैं जहां CAPTCHA पहले से इंस्टॉल है या अन्य सुरक्षा है और कोड तक एक्सेस नहीं है — कोई समस्या नहीं! तकनीक पहचानना आसान है। कार्यक्षमता जाँचने के लिए CapMonster Cloud का आइसोलेटेड टेस्ट वातावरण उपयोग करें ताकि टोकन्स प्रोसेसिंग और लॉजिक सही हो।
छवियों वाले CAPTCHA के लिए सिस्टम पहचानें, व्यवहार समझें और सुनिश्चित करें कि सुरक्षा काम कर रही है। इस लेख में हमने दिखाया कि ComplexImage CAPTCHA को कैसे पहचानें और इसे जोड़ें या री-कॉन्फ़िगर करें ताकि सुरक्षा बनाए रखें और नियंत्रण में रहे।