API दस्तावेज़ीकरण

API को अपने एप्लिकेशन में इंटीग्रेट करने के लिए उपलब्ध एंडपॉइंट्स, रिक्वेस्ट फॉर्मेट, पैरामीटर्स, और उदाहरण रिस्पॉन्स के लिए संदर्भ।

यह documentation उन developers के लिए है जो CapSkip को सीधे अपनी scripts, applications, या automation systems में इंटीग्रेट करना चाहते हैं। third party सॉफ़्टवेयर के उपयोगकर्ताओं को setup निर्देशों के लिए Tutorials अनुभाग का पालन करना चाहिए।

CapSkip व्यापक रूप से इस्तेमाल होने वाली कैप्चा हल करने वाली सेवाओं के APIs को एमुलेट करता है, जिससे यह बिना किसी बदलाव के कम्पैटिबल थर्ड-पार्टी सॉफ़्टवेयर से कनेक्ट हो पाता है। इंटीग्रेशन के लिए आमतौर पर सिर्फ़ CapSkip चलाना ही ज़रूरी होता है।

डॉक्यूमेंटेशन बताता है कि requests कैसे सबमिट करें और results कैसे प्राप्त करें। CapSkip कई API families को सपोर्ट करता है, जिनमें 2Captcha स्टाइल API (in.php / res.php), AntiCaptcha, CapMonster और CapSolver द्वारा उपयोग किया जाने वाला JSON createTask / getTaskResult API, और DeathByCaptcha REST API शामिल हैं। एक ही family की सेवाएँ समान endpoints, request और response format साझा करती हैं। प्रत्येक सेवा के लिए केवल base URL (host और port) अलग होता है।

API परिवारसेवाएँ
2captcha-शैली2captcha.com, rucaptcha.com, solvecaptcha.com, captchas.io
JSON (createTask / getTaskResult)anti-captcha.com, capmonster.cloud, capsolver.com
DeathByCaptchadeathbycaptcha.com

इमेज कैप्चा

एक सामान्य कैप्चा एक ऐसी image है जिसमें विकृत पर human-readable text होता है। इसे हल करने के लिए, उपयोगकर्ता को image में दिखाया गया text टाइप करना होता है।

किसी सामान्य कैप्चा को हल करने के लिए, API endpoint को HTTP POST request के ज़रिए image submit करें। configured local address और port का उपयोग करके request सीधे अपने CapSkip instance को भेजें, उदाहरण के लिए: http://127.0.0.1:PORT/in.php

CapSkip multipart/form-data या Base64-encoded format में images स्वीकार करता है।

Multipart सैंपल फ़ॉर्म

<form method="post" action="http://127.0.0.1:PORT/in.php" enctype="multipart/form-data">
<input type="hidden" name="method" value="post">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
The CAPTCHA file:
<input type="file" name="file">
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY अगर CapSkip में API key validation सक्षम है तो आपकी API key को दर्शाता है। अगर API key validation अक्षम है, तो कोई भी string वैल्यू स्वीकार की जाएगी।

Base64 नमूना form

<form method="post" action="http://127.0.0.1:PORT/in.php">
<input type="hidden" name="method" value="base64">
Your key:
<input type="text" name="key" value="YOUR_APIKEY">
The CAPTCHA file body in base64 format:
<textarea name="body">BASE64_FILE</textarea>
<input type="submit" value="Upload and get the ID">
</form>

YOUR_APIKEY अगर CapSkip में API key validation सक्षम है तो आपकी API key को दर्शाता है। अगर API key validation अक्षम है, तो कोई भी string वैल्यू स्वीकार की जाएगी।

BASE64_FILE Base64-encoded image डेटा है।

POST Request Parameters की सूची
POST पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
methodस्ट्रिंगहां post: इमेज को multipart/form-data का इस्तेमाल करके सबमिट करें
base64: इमेज को एक Base64-एन्कोडेड स्ट्रिंग के रूप में सबमिट करें
fileफ़ाइलहाँ* कैप्चा image file।
* method=post होने पर आवश्यक।
bodyस्ट्रिंगहाँ* Base64-encoded कैप्चा image data।
* method=base64 होने पर आवश्यक।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0: रिस्पॉन्स प्लेन टेक्स्ट के रूप में लौटाया जाता है
1: response JSON format में लौटाया जाता है

कैप्चा सबमिट करें (multipart file upload):

curl -X POST -F "key=YOUR_API_KEY" -F "method=post" -F "[email protected]" http://127.0.0.1:8080/in.php

कैप्चा सबमिट करें (base64 encoded):

curl -X POST -d "key=YOUR_API_KEY&method=base64&body=BASE64_IMAGE_DATA" http://127.0.0.1:8080/in.php

request सबमिट करने के बाद, अगर सब कुछ सही है, तो CapSkip कैप्चा ID को plain text के रूप में लौटाएगा: OK|12345

अगर json=1 parameter इस्तेमाल होता है, तो रिस्पॉन्स JSON फ़ॉर्मैट में लौटाया जाएगा:

{
"status":1,
"request":"12345"
}

1 सेकंड प्रतीक्षा करें, फिर result endpoint पर एक HTTP GET request भेजें (/res.php) लौटाई गई कैप्चा ID के साथ।

अगर कैप्चा हल हो गया है, तो CapSkip परिणाम को plain text के रूप में लौटाएगा: OK|TEXT

अगर json=1 निर्दिष्ट किया गया था, तो रिस्पॉन्स होगा:

{
"status":1,
"request":"TEXT"
}

अगर कैप्चा अभी तक हल नहीं हुआ है, तो CapSkip यह लौटाएगा: CAPCHA_NOT_READY

इस मामले में, 1 सेकंड रुकें और अंतिम रिज़ल्ट मिलने तक रिक्वेस्ट दोहराएँ। अगर CapSkip खाली response body लौटाता है, तो रिज़ल्ट पहले ही रिट्रीव किया जा चुका है या ID मौजूद नहीं है। हर रिज़ल्ट सिर्फ़ एक बार पढ़ा जा सकता है।

GET request parameters की सूची
GET पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
actionस्ट्रिंगहां get: सबमिट किए गए कैप्चा के लिए answer प्राप्त करें।
idपूर्णांकहां इसके द्वारा लौटाया गया कैप्चा ID in.php.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0: रिस्पॉन्स प्लेन टेक्स्ट के रूप में लौटाया जाता है
1: response JSON format में लौटाया जाता है
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

recaptcha v2 solver  reCAPTCHA V2

reCAPTCHA v2, जिसे “I’m not a robot” reCAPTCHA के नाम से भी जाना जाता है, एक व्यापक रूप से इस्तेमाल होने वाला कैप्चा प्रकार है। विज़िटर एक चेकबॉक्स पर टिक करता है, और Google या तो उसे तुरंत आगे जाने देता है या फ़ॉर्म सबमिट होने से पहले मिलती-जुलती तस्वीरें चुनने के लिए कहता है।

reCAPTCHA v2 हल करने के लिए, भेजें the googlekey और pageurl पैरामीटर्स के साथ method=userrecaptcha और आपकी CapSkip API key।

आप प्राप्त कर सकते हैं googlekey निम्नलिखित में से किसी एक method का उपयोग करके:

reCAPTCHA widget पर right-click करें और चुनें जाँचें। एक ऐसा URL ढूँढें जो इससे शुरू हो:

www.google.com/recaptcha/api2/anchor

इसका value कॉपी करें k उस URL से parameter। वैकल्पिक रूप से, इसे ढूंढें data-sitekey पेज source में attribute और उसकी value कॉपी करें।

CapSkip sitekey

जैसे ही आपके पास site key हो, एक HTTP GET या POST request सबमिट करें http://127.0.0.1:PORT/in.php

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
methodस्ट्रिंगहां userrecaptcha: एक reCAPTCHA v2 request निर्दिष्ट करता है।
googlekeyस्ट्रिंगहां इसका value k या data-sitekey टारगेट पेज पर पाया गया पैरामीटर।
pageurlस्ट्रिंगहां उस पेज का पूरा URL जहाँ reCAPTCHA स्थित है।
enterpriseपूर्णांक
डिफ़ॉल्ट: 0
नहीं 1: reCAPTCHA Enterprise v2 को दर्शाता है।
0: मानक reCAPTCHA v2।
invisibleपूर्णांक
डिफ़ॉल्ट: 0
नहीं 1: Invisible reCAPTCHA दर्शाता है।
0: standard checkbox reCAPTCHA।
data-sस्ट्रिंगनहीं का मान data-s page पर मिलने वाला parameter। Google Search और कुछ Google services पर लागू।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0: response सादे टेक्स्ट के रूप में लौटाया जाता है।
1: response को JSON format में लौटाया जाता है।
proxyस्ट्रिंगनहींप्रॉक्सी पता। IP authentication के लिए format: IP:PORT (उदाहरण: 123.123.123.123:3128). login/password authentication के लिए format: login:password@IP:PORT
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार। समर्थित values: HTTP, HTTPS, SOCKS5, SOCKS5H। डिफ़ॉल्ट: HTTP जब proxy प्रदान किया गया है पर proxytype छोड़ दिया जाता है।

reCAPTCHA v2 सबमिट करें (Standard):

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com" http://127.0.0.1:8080/in.php

reCAPTCHA v2 सबमिट करें (Invisible):

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&invisible=1" http://127.0.0.1:8080/in.php

Enterprise reCAPTCHA v2 सबमिट करें:

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1" http://127.0.0.1:8080/in.php

Enterprise reCAPTCHA v2 (Invisible) submit करें:

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1&invisible=1" http://127.0.0.1:8080/in.php

अगर request सफल होती है, तो CapSkip कैप्चा ID को plain text के रूप में लौटाएगा: OK|12345

अगर json=1 पैरामीटर का उपयोग किया गया था, तो response को JSON format में लौटाया जाएगा:

{
"status":1,
"request":"12345"
}

अगर request फेल होती है, तो CapSkip एक error code लौटाएगा।

15 से 20 सेकंड प्रतीक्षा करें, फिर हल प्राप्त करने के लिए result endpoint पर एक HTTP GET request भेजें: http://127.0.0.1:PORT/res.php

GET request parameters की सूची
GET पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
actionस्ट्रिंगहां get: सबमिट किए गए कैप्चा के लिए answer प्राप्त करें।
idपूर्णांकहां इसके द्वारा लौटाया गया कैप्चा ID in.php.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0: रिस्पॉन्स प्लेन टेक्स्ट के रूप में लौटाया जाता है
1: response JSON format में लौटाया जाता है
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

अगर कैप्चा हल हो गया है, तो CapSkip plain text या JSON में जवाब देगा और answer token लौटाएगा। token नीचे दिए गए जैसा दिखेगा:

03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB-50GQHPEBJUHNnhJyDzwRoRAkVzrf7UkV8wKCdTwrrWqiYDgbrzURfHc2ESsp020MicJTasSiXmNRgryt-gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3-egcplD1uLGh79wC34RF49Ui3eHwua4S9XHpH6YBe7gXzz6_mv-o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q

अगर कैप्चा अभी तक हल नहीं हुआ है, तो CapSkip लौटाएगा CAPCHA_NOT_READY। इस स्थिति में, 5 सेकंड प्रतीक्षा करें और request दोहराएँ। अगर CapSkip एक खाली response body लौटाता है, तो या तो result पहले ही प्राप्त किया जा चुका है या ID मौजूद नहीं है। प्रत्येक result को केवल एक बार पढ़ा जा सकता है।

इस ID वाले element को ढूंढें g-recaptcha-response और इसे हटाकर दृश्यमान बनाएँ display: none स्टाइल।

g recaptcha response CapSkip

कृपया ध्यान दें: कुछ मामलों में, पेज की सामग्री गतिशील रूप से जेनरेट होती है, और g-recaptcha-response element may not appear in the static HTML source. In such situations, inspect the page structure using your browser’s developer tools to locate the dynamically generated element.


एक विकल्प के रूप में, आप JavaScript का उपयोग करके इसका मान सेट कर सकते हैं g-recaptcha-response field सीधे:

document.getElementById("g-recaptcha-response").innerHTML="TOKEN";

पेज पर एक इनपुट फ़ील्ड दिखाई देगा। उत्तर टोकन को उस फ़ील्ड में पेस्ट करें और फॉर्म सबमिट करें।

recaptcha v2 solver  reCAPTCHA V2 Callback

कुछ मामलों में, कोई submit button नहीं होता और इसके बजाय एक callback function इस्तेमाल होता है। reCAPTCHA हल होने पर callback function अपने आप execute हो जाता है।

POST और GET request parameters की सूची यहाँ उपलब्ध है: reCAPTCHA V2 POST और GET request पैरामीटर

callback function आम तौर पर इसमें परिभाषित होता है data-callback reCAPTCHA widget का attribute, उदाहरण के लिए:

data-callback="myCallbackFunction"

अन्य मामलों में, callback फंक्शन को इस रूप में परिभाषित किया जाता है callback इसका parameter the grecaptcha.render() function, उदाहरण के लिए:

grecaptcha.render('example', {
'sitekey' : 'someSitekey',
'callback' : myCallbackFunction,
'theme' : 'dark'
});

callback फ़ंक्शन ढूंढने का एक और तरीका है browser का JavaScript console खोलना और reCAPTCHA configuration object का निरीक्षण करना:

___grecaptcha_cfg.clients[0].aa.l.callback

ध्यान दें कि aa.l property अलग हो सकती है, और पेज पर कई reCAPTCHA clients हो सकते हैं। ऐसे मामलों में, आपको यह भी inspect करना चाहिए clients[1], clients[2], और सही configuration object खोजने के लिए अन्य entries।

वैकल्पिक रूप से, आप reCAPTCHA parameters अपने आप निकालने के लिए निम्नलिखित script का उपयोग कर सकते हैं:

function findRecaptchaClients() {
if (typeof (___grecaptcha_cfg) !== 'undefined') {
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object');objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(([_, value]) => (
value && typeof value === 'object' && 'sitekey' in value && 'size' in value
));
if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV'){
data.pageurl = toplevel.baseURI;
}
if (found) {
const [sublevelKey, sublevel] = found;data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
return [];
}

अंत में, callback function को call करें:

myCallbackFunction();

या वैकल्पिक रूप से:

___grecaptcha_cfg.clients[0].aa.l.callback();

कुछ मामलों में, callback फंक्शन को एक आर्गुमेंट की आवश्यकता होती है। अधिकांश स्थितियों में, आपको हल किए गए टोकन को उस आर्गुमेंट के रूप में पास करना चाहिए। उदाहरण के लिए:

myCallbackFunction('TOKEN');

recaptcha v2 solver  reCAPTCHA V2 Invisible

reCAPTCHA v2 में एक Invisible mode भी होता है। आप यहाँ एक उदाहरण देख सकते हैं:

https://www.google.com/recaptcha/api2/demo?invisible=true

Invisible reCAPTCHA “I’m not a robot” checkbox नहीं दिखाता। इसके बजाय, यह आमतौर पर किसी बटन से जुड़ा होता है या पेज लोड या यूज़र इंटरैक्शन पर अपने आप ट्रिगर होता है, जैसे किसी बटन पर क्लिक करना या फॉर्म सबमिट करना।

आंतरिक रूप से, Invisible reCAPTCHA widget एक छिपे हुए के अंदर render होता है <div> दृश्यमान viewport के बाहर स्थित element, जो इसे उपयोगकर्ता के लिए अदृश्य बना देता है।

उपयोगकर्ता के cookies और risk score के आधार पर, reCAPTCHA बिना कोई challenge दिखाए अपने आप पास हो सकता है। अन्यथा, एक standard image challenge दिखाई देगा।

अधिकांश मामलों में, चैलेंज पूरा होने पर एक callback फंक्शन एक्ज़ीक्यूट होता है। अधिक विवरण के लिए ऊपर callback सेक्शन देखें।

POST और GET request parameters की सूची यहाँ उपलब्ध है: reCAPTCHA V2 POST और GET request पैरामीटर

कैसे तय करें कि reCAPTCHA Invisible है या नहीं?

आप निम्नलिखित संकेतकों में से किसी एक का उपयोग करके Invisible reCAPTCHA पहचान सकते हैं:

  • “I’m not a robot” checkbox दिखता नहीं है, पर उपयोगकर्ता के इंटरैक्शन के बाद एक challenge दिखता है।

  • reCAPTCHA iframe URL में parameter होता है size=invisible.

  • reCAPTCHA कॉन्फ़िगरेशन ऑब्जेक्ट में शामिल है एक size प्रॉपर्टी इस पर सेट invisible, उदाहरण के लिए:
    ___grecaptcha_cfg.clients[0].aa.l.size === "invisible"

API के ज़रिए Invisible reCAPTCHA हल करते समय, यह पैरामीटर शामिल करें: invisible=1

Browser में Invisible reCAPTCHA को कैसे संभालें?
तरीक़ा 1: JavaScript का उपयोग

इसका मान सेट करें g-recaptcha-response field को CapSkip द्वारा लौटाए गए token पर:

document.getElementById("g-recaptcha-response").innerHTML="TOKEN";

token सेट करने के बाद, वह action निष्पादित करें जो आमतौर पर सफल वेरिफ़िकेशन के बाद होता है।

अधिकांश मामलों में, इसका मतलब है एक फॉर्म सबमिट करना। आपको सही फॉर्म को उसके आधार पर पहचानना होता है id, name, या कोई अन्य attribute, और फिर submission को ट्रिगर करें। यहाँ कुछ उदाहरण हैं:

document.getElementById("recaptcha-demo-form").submit(); //by id "recaptcha-demo-form"
document.getElementsByName("myFormName")[0].submit(); //by element name "myFormName"
document.getElementsByClassName("example").submit(); //by class name "example"

कुछ मामलों में, reCAPTCHA हल होने पर एक callback फ़ंक्शन अपने आप निष्पादित होता है।

callback function आम तौर पर इसमें परिभाषित होता है data-callback reCAPTCHA widget का attribute, उदाहरण के लिए:

data-callback="myCallbackFunction"

अन्य मामलों में, callback फंक्शन को इस रूप में परिभाषित किया जाता है callback इसका parameter the grecaptcha.render() function, उदाहरण के लिए:

grecaptcha.render('example', {
'sitekey' : 'someSitekey',
'callback' : myCallbackFunction,
'theme' : 'dark'
});

आपको बस उस फंक्शन को कॉल करना है:

myCallbackFunction();
विधि 2: HTML को संशोधित करना

हटाएँ the <div> वह element जो page body से reCAPTCHA widget रखता है।

<div style="visibility: hidden; position: absolute; width:100%; top: -10000px; left: 0px; right: 0px; transition: visibility 0s linear 0.3s, opacity 0.3s linear; opacity: 0;">
<div style="width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 2000000000; background-color: #fff; opacity: 0.5;  filter: alpha(opacity=50)"></div>
<div style="margin: 0 auto; top: 0px; left: 0px; right: 0px; position: absolute; border: 1px solid #ccc; z-index: 2000000000; background-color: #fff; overflow: hidden;">
<iframe src="https://www.google.com/recaptcha/api2/bframe?hl=en&v=r20170213115309&k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs#zglq3yifgkmj"
title="recaptcha challenge"
style="width: 100%; height: 100%;"
scrolling="no"
name="zglq3yifgkmj"
frameborder="0"></iframe>
</div>
</div>

पेज से पूरा reCAPTCHA block हटा दें।

<div class="">
<!-- BEGIN: ReCAPTCHA implementation example. -->
<div
id="recaptcha-demo"
class="g-recaptcha"
data-sitekey="6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs"
data-callback="onSuccess"
data-bind="recaptcha-demo-submit"
>
<div
class="grecaptcha-badge"
style="width: 256px; height: 60px; transition: right 0.3s ease 0s; position: fixed; bottom: 14px; right: -186px; box-shadow: 0px 0px 5px gray;"
>
<div class="grecaptcha-logo">
<iframe
src="https://www.google.com/recaptcha/api2/anchor?k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs&co=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbTo0NDM.&hl=en&v=r20170213115309&size=invisible&cb=uror1hlow5a"
title="recaptcha widget"
scrolling="no"
name="undefined"
width="256"
height="60"
frameborder="0"
></iframe>
</div>
<div class="grecaptcha-error"></div>
<textarea
id="g-recaptcha-response"
name="g-recaptcha-response"
class="g-recaptcha-response"
style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none;  display: none; "
></textarea>
</div>
</div>
<script>
var onSuccess = function (response) {
var errorDivs = document.getElementsByClassName('recaptcha-error');
if (errorDivs.length) {
errorDivs[0].className = '';
}
var errorMsgs = document.getElementsByClassName('recaptcha-error-message');
if (errorMsgs.length) {
errorMsgs[0].parentNode.removeChild(errorMsgs[0]);
}
document.getElementById('recaptcha-demo-form').submit();
};
</script>
<!-- Optional noscript fallback. --><!-- END: ReCAPTCHA implementation example. -->
</div>

हटाए गए ब्लॉक के स्थान पर निम्नलिखित कोड डालें:

<input type="submit" /> <textarea name="g-recaptcha-response">%g-recaptcha-response%</textarea>

%g-recaptcha-response% CapSkip से प्राप्त उत्तर token को दर्शाता है।

block को बदलने के बाद, एक “Submit query” button दिखाई देगा। form को इसके साथ सबमिट करने के लिए button पर क्लिक करें g-recaptcha-response मान और अन्य सभी आवश्यक फॉर्म डेटा वेबसाइट को।

recaptcha v2 solver  reCAPTCHA V3

reCAPTCHA v3 Google द्वारा विकसित एक आधुनिक कैप्चा तंत्र है। यह कोई दिखने वाला challenge पेश नहीं करता और किसी user interaction की ज़रूरत नहीं होती। इसके बजाय, यह इस संभावना के आधार पर एक score देता है कि interaction इंसानी है।

तकनीकी रूप से, reCAPTCHA v3, reCAPTCHA v2 के समान है। वेबसाइट को reCAPTCHA API से एक token प्राप्त होता है, जिसे फिर एक POST request में लक्ष्य सर्वर पर भेजा जाता है और reCAPTCHA API के माध्यम से सत्यापित किया जाता है।

मुख्य अंतर यह है कि reCAPTCHA v3 कोई दृश्यमान challenge नहीं दिखाता। इसके बजाय, यह एक रेटिंग लौटाता है जो अनुमान लगाती है कि उपयोगकर्ता इंसान है या बॉट। इस रेटिंग को कहते हैं score और 0.0 से 1.0 तक होता है। स्कोर वेबसाइट को भेजा जाता है, जो फिर उस वैल्यू के आधार पर तय करती है कि रिक्वेस्ट को कैसे संभालना है।

एक अतिरिक्त पैरामीटर भी है जिसे कहते हैं action, जो वेबसाइट को विभिन्न उपयोगकर्ता इंटरैक्शन के बीच अंतर करने की अनुमति देता है। token को सत्यापित करने के बाद, reCAPTCHA API request से जुड़े action name को लौटाता है।

CapSkip का उपयोग करके reCAPTCHA v3 कैसे हल करें?

पहले, पुष्टि करें कि टारगेट वेबसाइट reCAPTCHA v3 इस्तेमाल कर रही है।

reCAPTCHA v3 के संकेतकों में शामिल हैं:

  • कोई दिखने वाला कैप्चा या image challenge नहीं

  • The api.js script इसके साथ लोड होती है render=SITEKEY पैरामीटर, उदाहरण के लिए:
    https://www.google.com/recaptcha/api.js?render=SITEKEY

  • The ___grecaptcha_cfg.clients array में एक उच्च numeric index वाली entry होती है, जैसे कि clients[100000]

reCAPTCHA v3 हल करने के लिए, निम्नलिखित parameters की पहचान करें:

  1. sitekey
    यह इसमें पाया जा सकता है render इसका parameter the api.js स्क्रिप्ट URL। यह एक iframe URL में भी दिखाई दे सकता है, उस JavaScript कोड के भीतर जो कॉल करता है grecaptcha.execute(), या इसके अंदर ___grecaptcha_cfg configuration object।
  2. action
    इसे JavaScript code में इन calls के निरीक्षण द्वारा खोजें grecaptcha.execute(), उदाहरण के लिए:
    grecaptcha.execute('SITEKEY', {action: 'do_something'})
    कुछ मामलों में, action ढूँढने के लिए page द्वारा load की गई कई JavaScript files की समीक्षा करनी पड़ती है। अगर आप action value तय नहीं कर पाते, तो आप default value इस्तेमाल कर सकते हैं "verify".
  3. pageurl
    उस page का पूरा URL जहां reCAPTCHA v3 लागू किया गया है।
स्कोर को समझना

स्वीकार्य स्कोर थ्रेशोल्ड वेबसाइट के अनुसार अलग-अलग होता है और केवल टेस्टिंग के माध्यम से निर्धारित किया जा सकता है। स्कोर की रेंज:

  • 0.0 → संभवतः बॉट

  • 1.0 → संभवतः इंसान

अधिकांश वेबसाइटें 0.3 और 0.7 के बीच thresholds इस्तेमाल करती हैं, क्योंकि वैध उपयोगकर्ताओं को भी कम scores मिल सकते हैं।

आप अपना इच्छित threshold इसका इस्तेमाल करके पास कर सकते हैं min_score parameter, पर अंतिम स्कोर हमेशा वेरिफ़िकेशन के समय Google द्वारा तय किया जाता है और सॉल्वर द्वारा इसकी गारंटी नहीं दी जा सकती।

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
methodस्ट्रिंगहां userrecaptcha: एक reCAPTCHA request निर्दिष्ट करता है।
versionस्ट्रिंगहां v3: दर्शाता है कि request reCAPTCHA v3 के लिए है।
googlekeyस्ट्रिंगहां इसका value data-sitekey टारगेट पेज पर पाया गया पैरामीटर।
pageurlस्ट्रिंगहां उस पेज का पूरा URL जहाँ reCAPTCHA स्थित है।
enterpriseपूर्णांक
डिफ़ॉल्ट: 0
नहीं 1: reCAPTCHA Enterprise v3 दर्शाता है।
0: मानक reCAPTCHA v3।
actionस्ट्रिंग
डिफ़ॉल्ट: verify
नहीं इसका value action पेज पर परिभाषित पैरामीटर।
min_scoreFloatनहीं token के लिए अनुरोधित न्यूनतम score। जब आपका server token सत्यापित करता है तब Google अंतिम score असाइन करता है, इसलिए यह वैल्यू एक संकेत है और इसकी गारंटी नहीं है। Google बाद में जो भी score असाइन करे उससे बेपरवाह, CapSkip जो token हासिल करता है वह लौटा देता है।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0: response सादे टेक्स्ट के रूप में लौटाया जाता है।
1: response को JSON format में लौटाया जाता है।
proxyस्ट्रिंगनहींप्रॉक्सी पता। IP authentication के लिए format: IP:PORT (उदाहरण: 123.123.123.123:3128). login/password authentication के लिए format: login:password@IP:PORT
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार। समर्थित values: HTTP, HTTPS, SOCKS5, SOCKS5H। डिफ़ॉल्ट: HTTP जब proxy प्रदान किया गया है पर proxytype छोड़ दिया जाता है।

reCAPTCHA v3 सबमिट करें:

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&version=v3&action=submit&min_score=0.7&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com" http://127.0.0.1:8080/in.php

Enterprise reCAPTCHA v3 सबमिट करें:

curl -X POST -d "key=YOUR_API_KEY&method=userrecaptcha&version=v3&action=submit&min_score=0.7&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&enterprise=1" http://127.0.0.1:8080/in.php

अगर request सफल होती है, तो CapSkip कैप्चा ID को plain text के रूप में लौटाएगा: OK|12345

अगर json=1 पैरामीटर निर्दिष्ट किया गया है, तो response को JSON format में लौटाया जाएगा:

{
"status":1,
"request":"12345"
}

अगर कोई error होता है, तो CapSkip एक error code लौटाएगा।

10 से 15 सेकंड प्रतीक्षा करें, फिर result endpoint पर एक HTTP GET request भेजें: http://127.0.0.1:PORT/res.php

अपनी request में लौटाई गई CAPTCHA ID दें। उपलब्ध parameters की पूरी सूची नीचे तालिका में दिखाई गई है।

अगर कैप्चा सफलतापूर्वक हल हो गया है, तो CapSkip नतीजा plain text या JSON format में लौटाएगा। लौटाई गई value नीचे दी गई जैसी एक verification token होती है:

03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB--gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3--o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q

अगर कैप्चा अभी तक हल नहीं हुआ है, तो CapSkip लौटाएगा CAPCHA_NOT_READY। 5 सेकंड प्रतीक्षा करें और request दोहराएं। अगर CapSkip एक खाली response body लौटाता है, तो या तो नतीजा पहले ही retrieve किया जा चुका है या वह ID मौजूद नहीं है। हर नतीजा केवल एक बार पढ़ा जा सकता है।

GET request parameters की सूची
GET पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
actionस्ट्रिंगहां get: सबमिट किए गए कैप्चा के लिए answer प्राप्त करें।
idपूर्णांकहां इसके द्वारा लौटाया गया कैप्चा ID in.php.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0: रिस्पॉन्स प्लेन टेक्स्ट के रूप में लौटाया जाता है
1: response JSON format में लौटाया जाता है
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

CapSkip से token मिलने के बाद, आपको इसे सही तरीके से टारगेट वेबसाइट को सबमिट करना होगा। यह कैसे काम करता है इसे समझने का सबसे अच्छा तरीका है सामान्य उपयोगकर्ता की तरह वेरिफ़िकेशन पूरा करते समय भेजी गई रिक्वेस्ट्स को देखना। ज़्यादातर browsers developer tools देते हैं जिनमें एक Network tab जो आपको आउटगोइंग requests का निरीक्षण करने देता है।

ज़्यादातर मामलों में, token एक POST request के माध्यम से भेजा जाता है। parameter name हो सकता है g-recaptcha-response, reCAPTCHA v2 के समान, या कुछ ऐसा जैसे g-recaptcha-response-100000। कुछ कार्यान्वयनों में, एक अलग parameter name का उपयोग किया जा सकता है।

आपको network requests का निरीक्षण करके यह तय करना चाहिए कि token कैसे प्रसारित होता है और फिर उसके अनुसार अपनी request की संरचना करनी चाहिए।

recaptcha v2 solver  reCAPTCHA Enterprise

reCAPTCHA Enterprise, Google के reCAPTCHA सिस्टम का उन्नत संस्करण है। यह v2 और v3 दोनों मोड में काम कर सकता है और वेबसाइट एडमिनिस्ट्रेटर को अतिरिक्त नियंत्रण देता है, जिसमें यह आकलन और रिपोर्ट करने की क्षमता शामिल है कि कोई इंटरैक्शन इंसानी था या स्वचालित।

reCAPTCHA Enterprise कैसे हल करें?

पहला कदम यह निर्धारित करना है कि website reCAPTCHA के Enterprise संस्करण का उपयोग कर रही है या नहीं।

reCAPTCHA Enterprise के मुख्य संकेतकों में शामिल हैं:

  • पेज लोड होता है enterprise.js के बजाय api.js, उदाहरण के लिए:

    <script src="https://recaptcha.net/recaptcha/enterprise.js" async defer></script>

  • वेबसाइट का JavaScript कोड कॉल करता है grecaptcha.enterprise.METHOD के बजाय grecaptcha.METHOD

इसके बाद तय करें कि कौन सा implementation इस्तेमाल हो रहा है: v2, Invisible v2, या v3। इसे आम तौर पर यह विश्लेषण करके पहचाना जा सकता है कि widget कैसे render होता है और page पर कैसे व्यवहार करता है।

सही इम्प्लीमेंटेशन तय करने के लिए नीचे दिए flowchart का पालन करें। यह अधिकांश मामलों में लागू होता है।

recaptcha enterprise

कैप्चा parameters को उसी तरह पहचानें जैसा reCAPTCHA v2 या v3 के लिए बताया गया है।

v2 Enterprise implementations के लिए, कुछ अतिरिक्त वैकल्पिक data हो सकता है। ज़्यादातर मामलों में, यह एक custom string होता है जो में परिभाषित होता है s या data-s parameter। अगर मौजूद हो, तो इस मान को अपनी रिक्वेस्ट में इसका इस्तेमाल करते हुए शामिल करें data-s पैरामीटर।

POST और GET request parameters की सूची यहाँ उपलब्ध है: reCAPTCHA V2 POST और GET request पैरामीटर

v3 Enterprise कार्यान्वयनों के लिए, आपको इसकी भी ज़रूरत हो सकती है action value। इसे ढूँढने के लिए, website’s के JavaScript code का निरीक्षण करें और खोजें grecaptcha.enterprise.execute() कॉल। यह action पैरामीटर आमतौर पर इस फंक्शन के भीतर पास किया जाता है। ध्यान रखें कि action वैकल्पिक है और कुछ मामलों में undefined हो सकता है।

POST और GET request parameters की सूची यहाँ उपलब्ध है: reCAPTCHA V3 POST और GET request parameters

जब आप अपनी request सबमिट करते हैं /in.php endpoint, अतिरिक्त parameter शामिल करें: enterprise=1

उसके बाद, CapSkip API के साथ उसी तरह इंटरैक्ट करें जैसे reCAPTCHA v2 या v3 हल करते समय करते हैं। जब token लौट आता है, तो उसे टारगेट वेबसाइट को उसके इम्प्लीमेंटेशन के अनुसार सबमिट करें।

Cloudflare turnstile solving Cloudflare Turnstile

Cloudflare Turnstile, Cloudflare द्वारा विकसित एक आधुनिक कैप्चा विकल्प है। यह पारंपरिक विज़ुअल challenge पर निर्भर हुए बिना यह सत्यापित करता है कि विज़िटर इंसान है या नहीं। Turnstile एक स्टैंडअलोन विजेट के रूप में या किसी challenge पेज के हिस्से के रूप में दिख सकता है, और यह कम या बिना किसी यूज़र इंटरैक्शन के काम करता है।

दो आम Turnstile implementations हैं:

1. स्टैंडअलोन Turnstile Widget

एक standalone Turnstile widget सीधे किसी website page पर एम्बेड होता है, जो आमतौर पर किसी form को स्वचालित सबमिशन से बचाता है। इस मामले में:

  • इसे निकालें sitekey from the page.

  • इसे पूरे के साथ CapSkip API को भेजें pageurl.

  • token प्राप्त करने के बाद, इसे इसमें डालें the cf-turnstile-response फ़ील्ड।

  • कुछ इम्प्लीमेंटेशन में, टोकन को इसमें भी रखने की आवश्यकता हो सकती है g-recaptcha-response फ़ील्ड।

  • अगर में कोई callback परिभाषित है turnstile.render() कॉन्फ़िगरेशन, इसे लौटाए गए token के साथ निष्पादित करें।

फिर form को हमेशा की तरह submit करें।

2. Cloudflare Challenge Page पर Turnstile

यह तब होता है जब वेबसाइट Cloudflare के ज़रिए proxied होती है और access देने से पहले एक Turnstile challenge पेज प्रस्तुत करती है। इस स्थिति में, आपको निम्नलिखित parameters निकालने होंगे:

  • cData

  • chlPageData

  • action

ये मान आपकी API रिक्वेस्ट में शामिल होने ही चाहिए। इसके अलावा, आपको यह इस्तेमाल करना ही होगा User-Agent token सबमिट करते समय CapSkip API द्वारा लौटाया गया value।

आवश्यक Parameters कैसे निकालें?

आवश्यक parameters निकालने के लिए, आप override कर सकते हैं turnstile.render मेथड और उस पर कॉल होने पर पास किए गए आर्गुमेंट्स को इंटरसेप्ट करें। उदाहरण के लिए, निम्नलिखित JavaScript कोड को पेज में इंजेक्ट करें। पैरामीटर्स को सफलतापूर्वक कैप्चर करने के लिए स्क्रिप्ट को Turnstile विजेट लोड होने से पहले एक्ज़ीक्यूट किया जाना चाहिए।

const i = setInterval(()=>{
if (window.turnstile) {
clearInterval(i)
window.turnstile.render = (a,b) => {
let p = {
method: "turnstile",
key: "YOUR_API_KEY",
sitekey: b.sitekey,
pageurl: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent,
json: 1
}
console.log(JSON.stringify(p))
window.tsCallback = b.callback
return 'foo'
}
}
},50)
POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
methodस्ट्रिंगहां turnstile: एक Cloudflare Turnstile रिक्वेस्ट निर्दिष्ट करता है।
sitekeyस्ट्रिंगहां इसका value data-sitekey टारगेट पेज पर पाया गया पैरामीटर।
pageurlस्ट्रिंगहां उस page का पूरा URL जहाँ Turnstile challenge स्थित है।
actionस्ट्रिंगनहीं में परिभाषित वैकल्पिक action value data-action attribute या इसे पास किया गया turnstile.render().
dataस्ट्रिंगनहीं इसका मान cData पास किया गया turnstile.render() या इसमें परिभाषित data-cdata attribute।
pagedataस्ट्रिंगनहीं इसका मान chlPageData पास किया गया turnstile.render().
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0: response सादे टेक्स्ट के रूप में लौटाया जाता है।
1: response को JSON format में लौटाया जाता है।
proxyस्ट्रिंगनहींप्रॉक्सी पता। IP authentication के लिए format: IP:PORT (उदाहरण: 123.123.123.123:3128). login/password authentication के लिए format: login:password@IP:PORT
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार। समर्थित values: HTTP, HTTPS, SOCKS5, SOCKS5H। डिफ़ॉल्ट: HTTP जब proxy प्रदान किया गया है पर proxytype छोड़ दिया जाता है।

Turnstile सबमिट करें (standalone):

curl -X POST -d "key=YOUR_API_KEY&method=turnstile&sitekey=0x4AAAAAAABUYP0XeMJF0xoy&pageurl=https://example.com" http://127.0.0.1:8080/in.php

Turnstile सबमिट करें (challenge, साथ में वैकल्पिक action, data, pagedata):

curl -X POST -d "key=YOUR_API_KEY&method=turnstile&sitekey=0x4AAAAAAABUYP0XeMJF0xoy&pageurl=https://example.com&action=managed&data=...&pagedata=..." http://127.0.0.1:8080/in.php

अगर request सफल होती है, तो CapSkip कैप्चा ID को plain text के रूप में लौटाएगा: OK|12345

अगर json=1 पैरामीटर निर्दिष्ट किया गया है, तो response को JSON format में लौटाया जाएगा:

{
"status":1,
"request":"12345"
}

अगर कोई error होता है, तो CapSkip एक error code लौटाएगा।

परिणाम प्राप्त करने के लिए लौटाई गई ID का उपयोग करें /res.php API का endpoint।

GET request parameters की सूची
GET पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहां आपकी CapSkip API key।
actionस्ट्रिंगहां get: सबमिट किए गए कैप्चा के लिए answer प्राप्त करें।
idपूर्णांकहां इसके द्वारा लौटाया गया कैप्चा ID in.php.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं 0 - response को plain text के रूप में लौटाया जाता है।
1 - response को JSON format में लौटाया जाता है, जिसमें शामिल है userAgent value।

Cloudflare Turnstile के लिए सॉल्वर एक विशिष्ट browser User-Agent का उपयोग करता है, और token सबमिट करते समय आपको वही User-Agent भेजना ज़रूरी है। इसके साथ json=1 response में शामिल है एक userAgent field। plain text मोड में, वही value यहाँ से पढ़ें X-Turnstile-User-Agent रिस्पॉन्स हेडर।

curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=CAPTCHA_ID"

geetest v3 GeeTest v3

GeeTest v3 Slider, GeeTest द्वारा विकसित एक इंटरैक्टिव कैप्चा है। यह तेज़ और सहज सत्यापन अनुभव प्रदान करते हुए मनुष्यों को बॉट्स से अलग करने के लिए एक slider challenge के माध्यम से उपयोगकर्ताओं का सत्यापन करता है।

CapSkip से GeeTest v3 कैप्चा हल करने के लिए, आपको पहले target website से ज़रूरी कैप्चा parameters प्राप्त करने होंगे। ज़रूरी parameters ये हैं:

  • gt: सार्वजनिक वेबसाइट कुंजी (स्टैटिक)
  • challenge: डायनामिक challenge मान
  • api_server: GeeTest API सर्वर डोमेन (वैकल्पिक)

ये values आम तौर पर तब उपलब्ध होती हैं जब website GeeTest को इनिशियलाइज़ करती है।

महत्वपूर्ण: एक नया challenge वैल्यू हर हल request के लिए प्राप्त करनी होती है। एक बार जब कैप्चा पेज पर लोड हो जाता है, तो पिछला challenge अमान्य हो जाता है। आपको website’s के network requests का निरीक्षण करके उस request की पहचान करनी चाहिए जो एक नया generate करती है challenge value और CapSkip को हर हल request सबमिट करने से पहले वह request करें।

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
methodस्ट्रिंगहांहोना ही चाहिए geetest। निर्दिष्ट करता है कि आप एक GeeTest v3 कैप्चा सबमिट कर रहे हैं।
gtस्ट्रिंगहांThe gt टारगेट वेबसाइट से प्राप्त वैल्यू।
challengeस्ट्रिंगहांThe challenge लक्षित वेबसाइट से प्राप्त value। हर हल request के लिए एक नई value प्राप्त करनी होगी।
pageurlस्ट्रिंगहांGeeTest कैप्चा वाले पेज का पूरा URL।
api_serverस्ट्रिंगनहींलक्ष्य वेबसाइट द्वारा उपयोग किया जाने वाला GeeTest API server domain (उदाहरण के लिए api.geetest.com या api-na.geetest.com).
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।
proxyस्ट्रिंगनहींप्रॉक्सी पता। IP authentication के लिए format: IP:PORT (उदाहरण: 123.123.123.123:3128). login/password authentication के लिए format: login:password@IP:PORT.
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार। समर्थित values: HTTP, HTTPS, SOCKS5, SOCKS5H। डिफ़ॉल्ट: HTTP जब proxy प्रदान किया गया है पर proxytype छोड़ दिया जाता है।

अपने CapSkip API endpoint पर एक HTTP GET या POST request सबमिट करें (/in.php) के साथ method=geetest। पिछले चरण में प्राप्त आवश्यक GeeTest parameters को कैप्चा वाले पेज के पूर्ण URL के साथ शामिल करें।

curl -X POST \
-d "key=YOUR_API_KEY" \
-d "method=geetest" \
-d "gt=f1ab2cdefa3456789012345b6c78d90e" \
-d "challenge=12345678abc90123d45678ef90123a456b" \
-d "pageurl=https://www.example.com/" \
-d "api_server=api-na.geetest.com" \
http://127.0.0.1:8080/in.php

अगर सब कुछ सफल होता है, तो CapSkip कैप्चा ID को सादे text के रूप में लौटाएगा: OK|212

अगर json=1 पैरामीटर निर्दिष्ट किया गया है, तो response को JSON format में लौटाया जाएगा:

{
"status": 1,
"request": "212"
}

अन्यथा, CapSkip एक उपयुक्त error code लौटाएगा।

लगभग प्रतीक्षा करें 5 सेकंड, फिर एक HTTP GET request सबमिट करें res.php परिणाम प्राप्त करने के लिए एंडपॉइंट।

GET request parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
actionस्ट्रिंगहांनिर्दिष्ट करें get कैप्चा का हल प्राप्त करने के लिए।
idपूर्णांकहांइसके द्वारा लौटाई गई CAPTCHA ID in.php request।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=212&json=1"

अगर कैप्चा सफलतापूर्वक हल हो गया है, तो CapSkip समाधान को JSON format में लौटाएगा:

{
"status": 1,
"request": "{\"geetest_challenge\":\"1a2b3456cd67890e12345fab678901c2de\",\"geetest_validate\":\"09fe8d7c6ba54f32e1dcb0a9fedc8765\",\"geetest_seccode\":\"12fe3d4c56789ba01f2e345d6789c012|jordan\"}"
}

अगर कैप्चा अभी तक हल नहीं हुआ है, तो CapSkip लौटाएगा: CAPCHA_NOT_READY

5 सेकंड इंतज़ार करें और request दोहराएँ। अगर कोई त्रुटि होती है, तो CapSkip एक उपयुक्त error code लौटाएगा। टारगेट वेबसाइट को अपनी request सबमिट करते समय निम्नलिखित फ़ील्ड का इस्तेमाल करके CapSkip द्वारा लौटाए गए मानों का उपयोग करें:

  • geetest_challenge
  • geetest_validate
  • geetest_seccode

altcha solver ALTCHA

ALTCHA एक proof of work कैप्चा है। इसमें पढ़ने के लिए कोई image नहीं होती और न ही बजाने के लिए कोई audio। target site एक challenge जारी करती है, और client को वह number brute force करके निकालना होता है जो उस challenge को पूरा करता हो। CapSkip उसी number की गणना करता है और वही payload लौटाता है जो widget ने बनाया होता।

यह कैसे काम करता है

यहाँ बचाव का आधार पहचान नहीं, बल्कि CPU लागत है। server एक लक्ष्य और एक search range (maxnumber) बताता है, और client तब तक candidates को hash करता रहता है जब तक उनमें से कोई मेल न खा जाए। इससे दो ऐसी बातें निकलती हैं, जो किसी CAPTCHA प्रकार के लिए असामान्य हैं।

पहली, हर solve deterministic होता है। यहाँ न कोई model है और न ही accuracy का कोई आँकड़ा, क्योंकि या तो जवाब बताई गई range के भीतर मौजूद होता है, या फिर challenge ही गलत ढंग से बना था। यहाँ कभी कुछ गलत पढ़ा ही नहीं जाता।

दूसरी, solve time CapSkip नहीं, बल्कि target site तय करती है। reference widget में default range 1,000,000 होती है, यानी कुछ ही milliseconds का काम। साइटें इसे बढ़ाने के लिए स्वतंत्र हैं, और कुछ तो 999,999,999 के साथ आती हैं, जो एक औसत challenge के लिए लगभग 50 करोड़ hashes होते हैं। अगर कोई साइट धीरे हल हो रही है, तो सबसे पहले उसका maxnumber मान देखें।

पूरा चक्र चार चरणों का है:

  1. challenge को उसी endpoint से लें जहाँ से widget उसे पढ़ता है।
  2. इसे यहाँ सबमिट करें: /in.php के साथ method=altcha.
  3. जब तक token तैयार न हो जाए, तब तक /res.php को poll करते रहें।
  4. token को वापस target form के इस field में भेजें: altcha फ़ील्ड।
हल करने से पहले आपको क्या चाहिए

challenge, दो में से किसी एक रूप में। दोनों ही स्वीकार किए जाते हैं, इसलिए आपके स्क्रैपर के पास जो पहले से मौजूद है, वही भेज दें।

पैरामीटरकब इस्तेमाल करें
challenge_jsonchallenge document आपके पास पहले से मौजूद है। CapSkip उसे लोकल रूप से हल कर लेता है और कोई network request करता ही नहीं, और यही सबसे तेज़ रास्ता है।
challenge_urlआपके पास सिर्फ़ वह endpoint है जो challenge देता है। CapSkip उसे fetch करता है, और अगर आपने प्रॉक्सी भेजी है तो उसी के ज़रिए, और फिर उसे हल करता है।
Challenge कहाँ मिलेगा

browser के developer tools खोलें, target page पर Network tab पर जाएँ, और वह request ढूँढें जो <altcha-widget> element अपने challenge के लिए भेजता है। यह अक्सर ऐसा कोई path होता है, जैसे /altcha/challenge। वही request URL है आपका challenge_url, और जवाब में आने वाला JSON है आपका challenge_json.

इस endpoint का नाम बताने वाला widget attribute अलग-अलग versions में बदलता रहा है, इसलिए अंदाज़ा लगाने के बजाय page का source पढ़ें। Widget v1 और v2 challengeurl="..."का इस्तेमाल करते हैं, जबकि v3 और उसके बाद के versions challenge="..." का इस्तेमाल URL और inline data, दोनों के लिए करते हैं। कुछ deployments challenge को page के भीतर ही बना लेते हैं और कुछ भी fetch नहीं करते।

एक challenge document कुछ ऐसा दिखता है:

{
"algorithm": "SHA-256",
"challenge": "3dd28253be6cc0c54d95f7f98c517e68a1b2c3d4e5f60718293a4b5c6d7e8f90",
"salt": "46d5b1c8871e5152d902ee3f?expires=1893456000",
"signature": "4b1cf0e0be0f4e5247e50b0f9a4498301234567890abcdef1234567890abcdef",
"maxnumber": 1000000
}
Challenge एक्सपायर हो जाते हैं, और समय बहुत कम मिलता है

हर challenge अपनी expiry खुद लेकर आता है, या तो salt के query string में, या फिर parameters.expiresAtके रूप में। एक बार यह समय बीत जाने पर target site solution को एक सादी verification failure के साथ अस्वीकार कर देती है, जो देखने में बिल्कुल गलत जवाब जैसी लगती है। दो मिनट जितनी छोटी समय-सीमाएँ आम हैं।

task बनाने से ठीक पहले challenge fetch करें, और token बिना देर किए सबमिट करें। challenge पहले से जमा करके न रखें, और जब तक कोई user form भर रहा हो तब तक token को रोककर न रखें। अगर आप challenge_url के बजाय challenge_jsonभेजते हैं, तो queue में रहते हुए challenge के expire होने पर CapSkip उसे अपने आप दोबारा fetch कर लेता है।

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
methodस्ट्रिंगहांहोना ही चाहिए altcha। यह बताता है कि आप एक ALTCHA challenge सबमिट कर रहे हैं।
pageurlस्ट्रिंगहांउस page का पूरा URL जहाँ से challenge आया है।
challenge_urlस्ट्रिंगहाँ*वह endpoint जहाँ से CapSkip को challenge fetch करना चाहिए। यह ज़रूरी है, जब तक challenge_json न भेजा जाए।
challenge_jsonस्ट्रिंगहाँ*challenge document खुद, एक JSON string के रूप में। यह ज़रूरी है, जब तक challenge_url न भेजा जाए।
proxyस्ट्रिंगनहींप्रॉक्सी का पता। ये formats स्वीकार्य हैं: IP:PORT, LOGIN:PASSWORD@IP:PORT या IP:PORT:LOGIN:PASSWORD। इसका इस्तेमाल सिर्फ़ challenge_url fetch के लिए होता है।
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार: HTTP, HTTPS, SOCKS5 या SOCKS5H.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।

इनमें से कोई एक भेजें: challenge_url या challenge_json। दोनों भेजना भी मान्य है, और ऐसे में inline document को प्राथमिकता मिलती है, क्योंकि fetch करने पर वही चीज़ दोबारा मिलेगी जो आपके पास पहले से है।

अपने CapSkip API endpoint पर एक HTTP GET या POST request सबमिट करें (/in.php) के साथ method=altcha। form fields और JSON body, दोनों एक ही field नामों के साथ स्वीकार किए जाते हैं, और GET भी काम करता है, क्योंकि ALTCHA में upload करने के लिए कोई image नहीं होती।

ALTCHA सबमिट करें (form fields):

curl -X POST \
-d "key=YOUR_API_KEY" \
-d "method=altcha" \
-d "pageurl=https://www.example.com/signup" \
--data-urlencode "challenge_url=https://www.example.com/captcha/api/altcha/challenge" \
-d "json=1" \
http://127.0.0.1:8080/in.php

ALTCHA सबमिट करें (JSON body):

curl -X POST \
-H "Content-Type: application/json" \
-d '{
"key": "YOUR_API_KEY",
"method": "altcha",
"pageurl": "https://www.example.com/signup",
"challenge_url": "https://www.example.com/captcha/api/altcha/challenge",
"json": 1
}' \
http://127.0.0.1:8080/in.php

JSON body में तीन ऐसी चीज़ें मुमकिन हैं जो form encoding में नहीं। Flags असली booleans हो सकते हैं ("json": true), challenge_json एक escaped string के बजाय सीधे nested document हो सकता है, और जिस field को null पर सेट किया गया हो, उसे न भेजा गया माना जाता है।

अगर सब कुछ सही है, तो CapSkip CAPTCHA ID को plain text के रूप में लौटाता है: OK|2122988149। अगर json=1 parameter भेजा गया था, तो इसके बजाय response एक JSON envelope होता है। दोनों ही स्थितियों में, लौटाया गया मान वही CAPTCHA ID है जिसके लिए आप result poll करते हैं।

{
"status": 1,
"request": "2122988149"
}

अन्यथा CapSkip एक उपयुक्त error code लौटाता है। गलत ढंग से बना inline challenge polling के बाद नहीं, बल्कि submit request पर ही अस्वीकार कर दिया जाता है, इसलिए आपको उसी request पर पता चल जाता है जो गलत थी।

लगभग 5 सेकंड प्रतीक्षा करें, फिर result endpoint (/res.php) पर आपको मिली CAPTCHA ID के साथ एक HTTP GET request भेजें।

GET request parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
actionस्ट्रिंगहांनिर्दिष्ट करें get कैप्चा का हल प्राप्त करने के लिए।
idपूर्णांकहांइसके द्वारा लौटाई गई CAPTCHA ID in.php request।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1"

अगर CAPTCHA हल हो चुका है, तो CapSkip solution को JSON format में लौटाता है:

{
"status": 1,
"request": "eyJhbGdvcml0aG0iOiJTSEEtMjU2IiwiY2hhbGxlbmdlIjoiM2RkMi...",
"solution": {
"token": "eyJhbGdvcml0aG0iOiJTSEEtMjU2IiwiY2hhbGxlbmdlIjoiM2RkMi...",
"number": 9661
},
"cost": "0.0020",
"createTime": 1788863246,
"endTime": 1788863246,
"errorId": 0,
"solveCount": 1
}

request और solution.token हमेशा एक ही string होते हैं, इसलिए आपका client जिसकी उम्मीद करता है, उसे पढ़ लें। number वह counter है जिसने challenge को हल किया, और इसे पूर्णता के लिए लौटाया जाता है। json=1के बिना, जवाब में सिर्फ़ यह मिलता है: OK|<token>.

अगर CAPTCHA अभी तक हल नहीं हुआ है, तो CapSkip यह लौटाता है: CAPCHA_NOT_READY, ठीक इसी वर्तनी के साथ, जैसा हर दूसरे method पर होता है। 5 सेकंड प्रतीक्षा करें और request दोहराएँ।

अपने polling loop की शर्त इस पर रखें: errorId, न कि status. status वही integer 1 है, जिसे res.php contract हमेशा से यही लौटाता आया है, और हर संगत SDK यही पढ़ता है। यदि आपने अपना क्लाइंट किसी ऐसे डॉक्यूमेंटेशन पेज के आधार पर लिखा है जिसमें दिखाया गया था "status": "ready"दिखाया गया है, तो इसके बजाय यह जाँचें: errorId === 0 , या फिर इस field की मौजूदगी जाँचें: solution.token क्यों मिलता है।

Token सबमिट करना

ALTCHA widget अपना payload एक form field में रखता है, जिसका नाम है altcha। token को उसी field में हूबहू सबमिट करें, ठीक वैसे ही जैसे widget ने किया होता:

POST https://www.example.com/signup
Content-Type: application/x-www-form-urlencodedemail=someone%40example.com&altcha=eyJhbGdvcml0aG0iOiJTSEEtMjU2Iiwi...

payload की आंतरिक संरचना उसी challenge पर निर्भर करती है जिससे वह बना है। एक legacy challenge एक सपाट document बनाता है, जिसमें ये fields सीधे शामिल होते हैं: number। वहीं एक PoW v2 challenge ऐसा document बनाता है जो मूल challenge को challenge के अंदर और जवाब को solutionके अंदर रखता है। token को opaque मानें और उसे बिना किसी बदलाव के आगे भेज दें, क्योंकि target site पहले से जानती है कि उसे किस आकार की उम्मीद करनी है।

कुछ integrations payload को इसके बजाय JSON body के किसी field से पढ़ते हैं, इसलिए देखें कि page का अपना submit क्या भेजता है और वैसा ही करें। token को दोबारा encode न करें, न उसे trim करें और न ही उसके क्रम में फेरबदल करें। यह एक JSON document का base64 है, जिसके fields server के HMAC signature के दायरे में आते हैं, इसलिए कोई भी बदलाव उसे अमान्य कर देता है।

समर्थित Algorithms

आपको यह पता लगाने की ज़रूरत नहीं कि कोई साइट कौन-सी स्कीम इस्तेमाल करती है। CapSkip challenge को पढ़कर खुद ही algorithm चुन लेता है।

स्कीमपीढ़ीसमर्थितविवरण
Legacy PoWv1हांऐसा n खोजें, जहाँ SHA(salt + n) challenge के बराबर हो। SHA-1, SHA-256, SHA-384 और SHA-512, सभी समर्थित हैं। ज़्यादातर deployments आज भी इसी रूप में चलते हैं।
PBKDF2PoW v2हांऐसा counter खोजें जिसकी derived key लक्षित prefix से शुरू होती हो। SHA-256, SHA-384 और SHA-512 समर्थित हैं। ALTCHA खुद अपने default के रूप में इसी का सुझाव देता है।
SHAPoW v2हांउसी स्कीम का iterative hash वाला रूप।
Argon2idPoW v2नहींमेमोरी-हार्ड key derivation function। इसे आज़माया नहीं जाता, बल्कि सीधे अस्वीकार कर दिया जाता है।
scryptPoW v2नहींमेमोरी-हार्ड key derivation function। इसे आज़माया नहीं जाता, बल्कि सीधे अस्वीकार कर दिया जाता है।

दोनों effort modes काम करते हैं और आपसे कुछ नहीं माँगते। deterministic mode में server पहले से ही target की गणना कर लेता है, जिससे solve time अनुमान के मुताबिक रहता है, और probabilistic mode में solve time हर challenge के साथ बदलता रहता है। तीनों widget types (native, checkbox और switch) समर्थित हैं, क्योंकि type सिर्फ़ control की दिखावट तय करता है और कभी API तक पहुँचता ही नहीं।

Argon2id और scrypt को आज़माया नहीं जाता, बल्कि अस्वीकार कर दिया जाता है। इनमें से किसी का भी इस्तेमाल करने वाला task लगभग एक तिहाई सेकंड में यह लौटाता है: ERROR_CAPTCHA_UNSOLVABLE , और इसे कभी दोबारा नहीं आज़माया जाता, इसलिए वह चुपचाप गलत तरीके से हल भी नहीं होता। चूँकि ALTCHA अपने default के रूप में PBKDF2 का सुझाव देता है, इसका असर बहुत कम साइटों पर पड़ता है।

captchafox solver CaptchaFox

CaptchaFox एक प्राइवेसी-केंद्रित कैप्चा है जो विज़िटर से कुछ पढ़ने के लिए कहने के बजाय browser को ही स्कोर करता है। ज़्यादातर विज़िटर को कोई पहेली दिखती ही नहीं। CapSkip इसे असली browser में असली widget चलाकर हल करता है और वही verification token लौटाता है जो widget ने खुद बनाया होता।

यह कैसे काम करता है

CaptchaFox तीन परतों में फ़ैसला करता है, और उनमें से सिर्फ़ आख़िरी परत दिखाई देती है। widget एक छोटा proof of work चलाता है, browser के बहुत सारे signals इकट्ठा करता है, और दोनों को अपने API पर भेज देता है। अगर यह सबूत सर्विस को संतुष्ट कर देता है, तो token तुरंत जारी हो जाता है और कोई पहेली बनाई ही नहीं जाती। इंटरैक्टिव चैलेंज तभी दिखता है जब यह सबूत पास नहीं होता।

इस बनावट का एक व्यावहारिक नतीजा है, जिसे इंटीग्रेट करने से पहले जान लेना ज़रूरी है। token किसी असली browser सेशन से बनता है, न कि आपके दिए हुए पैरामीटर पर की गई किसी गणना से, इसलिए CapSkip widget को आपके page URL के साथ लोड करता है और उसे चलने देता है। आप CapSkip को site key और page देते हैं, और CapSkip token लौटा देता है।

पूरा चक्र चार चरणों का है:

  1. टारगेट page से site key पढ़ें।
  2. इसे यहाँ सबमिट करें: /in.php के साथ method=captchafox.
  3. जब तक token तैयार न हो जाए, तब तक /res.php को poll करते रहें।
  4. token को वापस target form के इस field में भेजें: cf-captcha-response फ़ील्ड।
हल करने से पहले आपको क्या चाहिए

दो वैल्यू, और दोनों सीधे टारगेट page से ही पढ़ी जाती हैं। न तो कैप्चर करने के लिए कोई चैलेंज डॉक्यूमेंट होता है और न ही ऐसा कुछ जो टास्क के कतार में रहते हुए एक्सपायर हो जाए।

पैरामीटरयह कहाँ से आता है
sitekeyवह public key जिससे widget रेंडर किया जाता है। यह गुप्त नहीं है, हर विज़िटर के लिए एक ही रहती है, और आम तौर पर इसका प्रीफ़िक्स होता है sk_.
pageurlउस page का पूरा URL जिस पर widget दिखता है। CaptchaFox इसे उन डोमेन से मिलाकर जाँचता है जिनके लिए key रजिस्टर की गई है, इसलिए यह असली page ही होना चाहिए।
Site Key कहाँ मिलेगी

टारगेट page पर browser के developer tools खोलें और CaptchaFox कंटेनर ढूँढें। साइटें widget को दो में से किसी एक तरीके से रेंडर करती हैं, और दोनों में key दिखाई देती है।

<!-- Automatic rendering: the key is an attribute -->
<div class="captchafox" data-sitekey="sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G"></div><!-- Explicit rendering: the key is in the render call -->
<script>
captchafox.render("#container", {
sitekey: "sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G",
onVerify: function (token) { /* ... */ }
});
</script>

अगर page widget को रनटाइम पर बनाता है और इसीलिए इनमें से कुछ भी सर्व किए गए HTML में नहीं है, तो Network टैब खोलें और वह रिक्वेस्ट ढूँढें जो इस पते पर जाती है: api.captchafox.com। key वह path सेगमेंट है जो इसके बाद आता है: /captcha/.

Page URL का Key से मेल खाना ज़रूरी है

CaptchaFox की keys अनुमति वाले डोमेन की एक सूची के साथ रजिस्टर होती हैं, और सर्विस कुछ भी जारी करने से पहले होस्ट की जाँच करती है। जो key सही तो है लेकिन उस सूची से बाहर के किसी page पर इस्तेमाल होती है, उसे कभी-कभार नहीं, बल्कि हमेशा के लिए अस्वीकार कर दिया जाता है।

CapSkip ऐसे मामले को दोबारा आज़माने के बजाय रिपोर्ट कर देता है, क्योंकि दोबारा कोशिश करने से कोई फ़ायदा नहीं होता। अगर कोई site key तुरंत और लगातार फ़ेल होती है, तो जाँचें कि pageurl वही page है जिस पर widget असल में चलता है, न कि कोई सर्च page, कोई रीडायरेक्ट या कोई छोटा किया गया लिंक जो कहीं और जाकर खुलता है।

चैलेंज के प्रकार

कौन-सा चैलेंज आएगा, यह आप तय नहीं करते। यह CaptchaFox तय करता है, और जो मिलता है CapSkip उसे संभाल लेता है।

Challengeकब दिखता हैसमर्थितविवरण
Invisibleआम तौर परहांbrowser के सबूत सर्विस को संतुष्ट कर देते हैं और स्क्रीन पर कुछ भी दिखाए बिना token जारी हो जाता है। यही आम रास्ता है और सबसे तेज़ भी।
स्लाइडकभी-कभीहांएक स्लाइडर पहेली, जिसमें एक टुकड़े को खींचकर खाली जगह में ले जाना होता है। CapSkip टारगेट का पता लगाता है और ड्रैग पूरा करता है।
इमेज चुननाबहुत कमनहींचुनने के लिए इमेज का एक ग्रिड। इसे unsolvable बताया जाता है, ताकि आपका क्लाइंट टाइमआउट का इंतज़ार करने के बजाय दोबारा कोशिश करके कोई नया चैलेंज ले सके।
ऑडियोबहुत कमनहींएक्सेसिबिलिटी वाला फ़ॉलबैक। इसी वजह से इसे भी unsolvable बताया जाता है।

जो दो चैलेंज सपोर्ट नहीं होते, वे कम ही आते हैं, और दोबारा कोशिश करने पर आम तौर पर कोई दूसरा चैलेंज मिल जाता है। unsolvable नतीजे को दोबारा सबमिट करने के संकेत की तरह लें, न कि key की स्थायी विफलता की तरह।

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
methodस्ट्रिंगहांहोना ही चाहिए captchafox। यह बताता है कि आप CaptchaFox कैप्चा सबमिट कर रहे हैं।
sitekeyस्ट्रिंगहांटारगेट page से पढ़ी गई site key, जिसका प्रीफ़िक्स आम तौर पर होता है sk_.
pageurlस्ट्रिंगहांउस page का पूरा URL जिस पर widget दिखता है।
api_serverस्ट्रिंगनहींलोड किया जाने वाला widget एंट्री पॉइंट। डिफ़ॉल्ट रूप से यह होता है https://cdn.captchafox.com/। नीचे Widget सोर्स चुनना देखें।
useragentस्ट्रिंगनहींदूसरी सर्विसेज़ के साथ कम्पैटिबिलिटी के लिए इसे स्वीकार किया जाता है, लेकिन लागू नहीं किया जाता। CapSkip असली browser में हल करता है और उसी browser की अपनी एक जैसी पहचान इस्तेमाल करता है।
proxyस्ट्रिंगनहींप्रॉक्सी का पता। ये formats स्वीकार्य हैं: IP:PORT, LOGIN:PASSWORD@IP:PORT या IP:PORT:LOGIN:PASSWORD.
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार: HTTP, HTTPS, SOCKS5 या SOCKS5H.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।

ज़्यादातर services के उलट, CapSkip इस method के लिए proxy ज़रूरी नहीं करता। फिर भी जैसे ही आप किसी ठीक-ठाक volume पर solve करने लगेंगे, आपको proxy चाहिए होंगे: CaptchaFox सिर्फ़ browser को नहीं, widget जिस network पर चल रहा है उसे भी score करता है, इसलिए एक ही address से बार-बार solve करने पर वह address पहले interactive challenges की तरफ़ और उसके बाद refusals की तरफ़ बढ़ता है। टेस्टिंग और कभी-कभार के solve के लिए एक address काफ़ी है। उससे आगे CapSkip में proxy pool configure करें और load उसी पर बाँटने दें, या token को किसी ख़ास network से आना हो तो हर request के साथ proxy भेजें।

अपने CapSkip API endpoint पर एक HTTP GET या POST request सबमिट करें (/in.php) के साथ method=captchafox। form fields और JSON body, दोनों एक ही field नामों के साथ स्वीकार किए जाते हैं, और GET भी काम करता है, क्योंकि CaptchaFox में अपलोड करने के लिए कोई इमेज होती ही नहीं।

CaptchaFox सबमिट करें (form फ़ील्ड):

curl -X POST \
-d "key=YOUR_API_KEY" \
-d "method=captchafox" \
-d "sitekey=sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G" \
-d "pageurl=https://www.example.com/signup" \
-d "json=1" \
http://127.0.0.1:8080/in.php

CaptchaFox सबमिट करें (JSON बॉडी):

curl -X POST \
-H "Content-Type: application/json" \
-d '{
"key": "YOUR_API_KEY",
"method": "captchafox",
"sitekey": "sk_xtNxpk6fCdFbxh1_xJeGflSdCE9tn99G",
"pageurl": "https://www.example.com/signup",
"json": 1
}' \
http://127.0.0.1:8080/in.php

अगर सब कुछ सही है, तो CapSkip CAPTCHA ID को plain text के रूप में लौटाता है: OK|2122988149। अगर json=1 parameter भेजा गया था, तो इसके बजाय response एक JSON envelope होता है। दोनों ही स्थितियों में, लौटाया गया मान वही CAPTCHA ID है जिसके लिए आप result poll करते हैं।

{
"status": 1,
"request": "2122988149"
}

वरना CapSkip उपयुक्त error code लौटाता है। site key न होने या page URL के इस्तेमाल लायक न होने पर रिक्वेस्ट पोलिंग के बाद नहीं, बल्कि सबमिट रिक्वेस्ट पर ही अस्वीकार हो जाती है, इसलिए जो रिक्वेस्ट ग़लत थी, उसी पर आपको पता चल जाता है।

लगभग 5 सेकंड प्रतीक्षा करें, फिर result endpoint (/res.php) पर वह कैप्चा ID भेजें जो आपको मिली थी। CaptchaFox का एक solve असली browser सेशन चलाता है, इसलिए उम्मीद रखें कि इसमें ALTCHA जैसे गणना-आधारित method से ज़्यादा समय लगेगा, और इंटरैक्टिव चैलेंज आने पर उससे भी ज़्यादा।

GET request parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
actionस्ट्रिंगहांनिर्दिष्ट करें get कैप्चा का हल प्राप्त करने के लिए।
idपूर्णांकहांइसके द्वारा लौटाई गई CAPTCHA ID in.php request।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1"

अगर CAPTCHA हल हो चुका है, तो CapSkip solution को JSON format में लौटाता है:

{
"status": 1,
"request": "177f50c25b845601e5c779cdb51b040d523e8ab69efb4d5b343e28df07d05076",
"solution": {
"token": "177f50c25b845601e5c779cdb51b040d523e8ab69efb4d5b343e28df07d05076"
},
"cost": "0.00145",
"createTime": 1788863246,
"endTime": 1788863262,
"errorId": 0,
"solveCount": 1
}

request और solution.token हमेशा एक ही स्ट्रिंग होते हैं, इसलिए आपका क्लाइंट जिसकी अपेक्षा करता हो, उसे पढ़ लें। बिना json=1के बिना, जवाब में सिर्फ़ यह मिलता है: OK|<token>.

अगर CAPTCHA अभी तक हल नहीं हुआ है, तो CapSkip यह लौटाता है: CAPCHA_NOT_READY, ठीक इसी वर्तनी के साथ, जैसा हर दूसरे method पर होता है। 5 सेकंड प्रतीक्षा करें और request दोहराएँ।

अपने polling loop की शर्त इस पर रखें: errorId, न कि status. status वही integer 1 है, जिसे res.php contract हमेशा से यही लौटाता आया है, और हर संगत SDK यही पढ़ता है। यदि आपने अपना क्लाइंट किसी ऐसे डॉक्यूमेंटेशन पेज के आधार पर लिखा है जिसमें दिखाया गया था "status": "ready"दिखाया गया है, तो इसके बजाय यह जाँचें: errorId === 0 , या फिर इस field की मौजूदगी जाँचें: solution.token क्यों मिलता है।

Token सबमिट करना

CaptchaFox widget अपना token एक form फ़ील्ड में रखता है, जिसका नाम है cf-captcha-response। token को उसी field में हूबहू सबमिट करें, ठीक वैसे ही जैसे widget ने किया होता:

POST https://www.example.com/signup
Content-Type: application/x-www-form-urlencodedemail=someone%40example.com&cf-captcha-response=177f50c25b845601e5c779cdb51b040d...

कुछ इंटीग्रेशन token को इसके बजाय JSON बॉडी की किसी फ़ील्ड से पढ़ते हैं, इसलिए देखें कि page का अपना submit क्या भेजता है और वैसा ही करें। token को opaque मानें और उसे बिना बदले आगे भेजें। इसकी जाँच सर्वर साइड पर उसी सेशन के आधार पर होती है जिसने इसे बनाया था, इसलिए कोई भी बदलाव इसे अमान्य कर देता है।

Tokens कम समय तक ही चलते हैं। किसी यूज़र के form भरने तक token को रोके रखने के बजाय उसे तुरंत सबमिट करें, और अगर form बीच में छोड़कर बाद में दोबारा शुरू किया जाए, तो फिर से हल करें।

Widget सोर्स चुनना

CaptchaFox अपना widget दो जगहों से पब्लिश करता है, और कोई साइट इनमें से कौन-सा लोड करती है, यही तय करता है कि वह वापस किस रूप में token की उम्मीद करती है। api_server तभी भेजें जब टारगेट page डिफ़ॉल्ट का इस्तेमाल न करता हो।

api_serverTokenडिफ़ॉल्टविवरण
https://cdn.captchafox.com/सादाहांमानक widget, जिसे अधिकांश साइटें इस्तेमाल करती हैं। जब आप कुछ नहीं भेजते, तब CapSkip यही लोड करता है।
https://s.uicdn.com/mampkg/MAM_ प्रीफ़िक्स वालानहींपैकेज्ड बिल्ड, जिसे कुछ प्लेटफ़ॉर्म एम्बेड करते हैं। यह ऐसा token लौटाता है जिसका प्रीफ़िक्स होता है MAM_। पूरा पैकेज पाथ ठीक वैसे ही भेजें जैसा वह page के script टैग में दिखता है।

यह वैल्यू उस <script> टैग से पढ़ें जो टारगेट page पर widget को लोड करता है। अगर आप ग़लत वाला भेजते हैं, तो solve तब भी सफल होता है, लेकिन token ऐसे फ़ॉर्मैट में वापस आता है जिसे टारगेट साइट स्वीकार नहीं करेगी, और यह किसी एरर की तरह नहीं, बल्कि चुपचाप हुई वेरिफ़िकेशन विफलता जैसी दिखती है।

capy puzzle solver Capy Puzzle

Capy Puzzle एक ड्रैग एंड ड्रॉप CAPTCHA है: किसी फ़ोटो में से एक टुकड़ा काट लिया जाता है और विज़िटर उसे खिसकाकर वापस उसी खाली जगह में बिठाता है जहाँ से वह आया था। CapSkip वही तीन वैल्यू लौटाता है जो widget ने page में लिखी होतीं, आपके form के साथ सबमिट करने के लिए तैयार।

यह कैसे काम करता है

इस page के बाक़ी CAPTCHA से Capy इस मामले में अलग है कि चैलेंज का कोई भी हिस्सा किसी सर्वर से जारी नहीं होता। widget अपनी challenge key खुद बनाता है, Capy API से उसी key वाली पहेली माँगता है, और विज़िटर टुकड़े को खींचकर सही जगह पर रख देता है। पहले से लाने के लिए कोई token नहीं होता और दोहराने के लिए कोई handshake भी नहीं।

answer कोई कोऑर्डिनेट नहीं होता। widget उस पूरे रास्ते को रिकॉर्ड करता है जिस पर टुकड़े को खींचा गया था और उसे एक स्ट्रिंग में एन्कोड कर देता है, इसलिए आप टारगेट साइट को जो वापस भेजते हैं वह कोई मंज़िल नहीं, बल्कि भरोसेमंद लगने वाला एक ड्रैग होता है। यह रास्ता CapSkip आपके लिए तैयार करता है।

पूरा चक्र चार चरणों का है:

  1. टारगेट page से CAPTCHA key पढ़ें।
  2. इसे यहाँ सबमिट करें: /in.php के साथ method=capy.
  3. जब तक token तैयार न हो जाए, तब तक /res.php को poll करते रहें।
  4. लौटाई गई तीनों वैल्यू को टारगेट form में वापस भेजें।
हल करने से पहले आपको क्या चाहिए

दो वैल्यू, और दोनों सीधे टारगेट page से ही पढ़ी जाती हैं।

पैरामीटरयह कहाँ से आता है
captchakeyसाइट की सार्वजनिक Capy key, जिसका प्रीफ़िक्स आम तौर पर होता है PUZZLE_। यह page के सोर्स में इस रूप में दिखती है: capy_captchakey, और widget के script URL में इस k query parameter के रूप में।
pageurlउस page का पूरा URL जिस पर widget दिखता है। Capy इस वैल्यू को कभी नहीं देखता, लेकिन keys साइटों के हिसाब से रजिस्टर होती हैं, इसलिए असली page ही भेजें।

एक तीसरी वैल्यू भी जाँचने लायक है: api_server, जो उस Capy API का रूट है जिसके पीछे यह key रहती है। इसे उसी script टैग से पढ़ें। CapSkip का डिफ़ॉल्ट है https://jp.api.capy.me, जहाँ लाइव सर्विस चलती है, और इसे अलग से बताने की ज़रूरत सिर्फ़ तब पड़ती है जब टारगेट page कहीं और की ओर इशारा कर रहा हो।

कई solving सर्विसेज़ आज भी अपने डॉक्यूमेंटेशन में api.capy.me को बिना रीजनल प्रीफ़िक्स के दिखाती हैं। वह होस्ट अब रिज़ॉल्व नहीं होता। अगर आपने इसे कहीं और से कॉपी किया है, तो इसे हटा दें और CapSkip को अपना डिफ़ॉल्ट इस्तेमाल करने दें।

CAPTCHA key कहाँ मिलेगी

टारगेट page पर browser के developer tools खोलें और Capy widget ढूँढें। साइटें widget को जिन दो तरीक़ों से लोड करती हैं, उन दोनों में key दिखाई देती है।

<!-- In the page source, as the widget configuration -->
<div id="capy"></div>
<script>
window.capyOptions = {
captchakey: "PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v",
puzzle_div: "capy"
};
</script><!-- Or in the script URL itself, as the k parameter -->
<script src="https://jp.api.capy.me/puzzle/get_js/?k=PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v"></script>

उस script URL का रूट, https://jp.api.capy.me/ जो ऊपर के उदाहरण में है, वही api_server वैल्यू है, अगर आपको कोई भेजनी हो।

जवाब तीन वैल्यू होता है, कोई token नहीं

इस page के बाक़ी हर method से इसका एक ही ढाँचागत फ़र्क़ है, और क्लाइंट लिखने से पहले इसे पढ़ लेना फ़ायदेमंद है। reCAPTCHA, Turnstile और CaptchaFox, सब एक ही opaque स्ट्रिंग के रूप में वापस आते हैं। Capy का solution तीन अलग-अलग वैल्यू होता है, जो सिर्फ़ साथ मिलकर ही काम करती हैं।

लौटाई गई वैल्यूटारगेट form की इस फ़ील्ड में जाती है
captchakeycapy_captchakey
challengekeycapy_challengekey
answercapy_answer

चूँकि एक सादा OK|<token> में तीन नहीं, सिर्फ़ एक वैल्यू की जगह होती है, इसलिए /res.php इस method के लिए पूरा solution object लौटाता है। plain text जवाब में भी यही आता है, और JSON जवाब के request field में भी। एक चौथा field, respKey, दूसरी सर्विसेज़ के लिए लिखे गए क्लाइंट्स के साथ कम्पैटिबिलिटी के लिए खाली स्ट्रिंग के रूप में वापस आती है। puzzle के solve में यह कुछ नहीं बताती, इसलिए इसे नज़रअंदाज़ किया जा सकता है।

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
methodस्ट्रिंगहांहोना ही चाहिए capy। यह बताता है कि आप Capy Puzzle CAPTCHA सबमिट कर रहे हैं।
captchakeyस्ट्रिंगहांटारगेट page से पढ़ी गई CAPTCHA key, जिसका प्रीफ़िक्स आम तौर पर होता है PUZZLE_. sitekey और websiteKey को एलियास के रूप में स्वीकार किया जाता है।
pageurlस्ट्रिंगहांउस page का पूरा URL जिस पर widget दिखता है।
api_serverस्ट्रिंगनहींउस Capy API का रूट जिसके पीछे यह key रहती है। डिफ़ॉल्ट है https://jp.api.capy.me.
versionस्ट्रिंग
डिफ़ॉल्ट: puzzle
नहींचैलेंज फ़ैमिली। सिर्फ़ puzzle हल किया जाता है। नीचे Puzzle और Avatar देखें।
userAgentस्ट्रिंगनहींपहेली वाली request के साथ भेजा जाने वाला User-Agent। वैकल्पिक, और इसकी ज़रूरत बहुत कम पड़ती है।
proxyस्ट्रिंगनहींप्रॉक्सी का पता। ये formats स्वीकार्य हैं: IP:PORT, LOGIN:PASSWORD@IP:PORT या IP:PORT:LOGIN:PASSWORD.
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार: HTTP, HTTPS, SOCKS5 या SOCKS5H.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।

CapSkip इस method के लिए proxy ज़रूरी नहीं करता, लेकिन जैसे ही आप किसी ठीक-ठाक volume पर solve करने लगेंगे, आपको proxy चाहिए होंगे। हर solve एक live request से Capy API से नई पहेली लेता है, और एक ही address से आने वाला ऐसा लगातार सिलसिला ठीक वही pattern है जिसे पकड़ने के लिए rate limiting बनी है। टेस्टिंग और कभी-कभार के solve के लिए एक address काफ़ी है। उससे आगे CapSkip में proxy pool configure करें और load उसी पर बाँटने दें, या किसी solve को ख़ास network से आना हो तो हर request के साथ proxy भेजें।

अपने CapSkip API endpoint पर एक HTTP GET या POST request सबमिट करें (/in.php) के साथ method=capy। एक जैसे field नामों के तहत form fields, query string और JSON body, तीनों स्वीकार किए जाते हैं, क्योंकि Capy में अपलोड करने के लिए कोई इमेज होती ही नहीं।

Capy Puzzle सबमिट करें (form फ़ील्ड):

curl -X POST \
-d "key=YOUR_API_KEY" \
-d "method=capy" \
-d "captchakey=PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v" \
-d "pageurl=https://www.example.com/login" \
-d "json=1" \
http://127.0.0.1:8080/in.php

Capy Puzzle सबमिट करें (JSON बॉडी):

curl -X POST \
-H "Content-Type: application/json" \
-d '{
"key": "YOUR_API_KEY",
"method": "capy",
"captchakey": "PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v",
"api_server": "https://jp.api.capy.me/",
"pageurl": "https://www.example.com/login",
"json": 1
}' \
http://127.0.0.1:8080/in.php

अगर सब कुछ सही है, तो CapSkip CAPTCHA ID को plain text के रूप में लौटाता है: OK|2122988149। अगर json=1 parameter भेजा गया था, तो इसके बजाय response एक JSON envelope होता है। दोनों ही स्थितियों में, लौटाया गया मान वही CAPTCHA ID है जिसके लिए आप result poll करते हैं।

{
"status": 1,
"request": "2122988149"
}

वरना CapSkip उपयुक्त error code लौटाता है। CAPTCHA key का न होना, page URL का इस्तेमाल लायक न होना, या ऐसा api_server जो URL ही नहीं है: ये सब पोलिंग के बाद नहीं, बल्कि सबमिट रिक्वेस्ट पर ही अस्वीकार हो जाते हैं, इसलिए जो रिक्वेस्ट ग़लत थी, उसी पर आपको पता चल जाता है।

लगभग 3 सेकंड प्रतीक्षा करें, फिर result endpoint (/res.php) पर एक HTTP GET request भेजें, उसी CAPTCHA ID के साथ जो आपको मिली थी। किसी solve को लौटाने से पहले जान-बूझकर इतनी देर रोका जाता है कि वह इंसानी रफ़्तार जैसा लगे। इसकी वजह जानने के लिए नीचे टाइमिंग देखें।

GET request parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
actionस्ट्रिंगहांनिर्दिष्ट करें get कैप्चा का हल प्राप्त करने के लिए।
idपूर्णांकहांइसके द्वारा लौटाई गई CAPTCHA ID in.php request।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1"

अगर CAPTCHA हल हो चुका है, तो CapSkip solution को JSON format में लौटाता है:

{
"status": 1,
"request": {
"captchakey": "PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v",
"challengekey": "BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP",
"answer": "0xax8ex0xax84x0xkx7qx0x18x76x0x1ix6sx0x26x68x0x2gx5kx0x34x50x",
"respKey": ""
},
"solution": {
"captchakey": "PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v",
"challengekey": "BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP",
"answer": "0xax8ex0xax84x0xkx7qx0x18x76x0x1ix6sx0x26x68x0x2gx5kx0x34x50x",
"respKey": ""
},
"cost": "0.00299",
"createTime": 1788863246,
"endTime": 1788863250,
"errorId": 0,
"solveCount": 1
}

request और solution एक ही object लेकर आते हैं, इसलिए आपका क्लाइंट जिसकी अपेक्षा करता हो, उसे पढ़ लें। बिना json=1के, वही object OK| prefix के बाद एक ही JSON line के रूप में आता है। जो client res.php को plain text के रूप में पढ़ता है, वह यही लौटाएगा:

OK|{"captchakey":"PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v","challengekey":"BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP","answer":"0xax8ex0xax84x0xkx7qx","respKey":""}

अगर CAPTCHA अभी तक हल नहीं हुआ है, तो CapSkip यह लौटाता है: CAPCHA_NOT_READY, बिल्कुल इसी वर्तनी में, जैसा हर दूसरे method पर होता है। 3 सेकंड प्रतीक्षा करें और request दोहराएँ।

हर नतीजा सिर्फ़ एक बार दिया जाता है। पहला सफल poll हल लौटाकर उसे हटा देता है, और उसी ID के लिए बाद का हर poll खाली बॉडी लौटाता है, इसलिए जिस रिप्लाई में वैल्यू आई थीं, उन्हें सँभालकर रखें।

हल सबमिट करना

ये तीनों वैल्यू उन्हीं form फ़ील्ड में जाती हैं जिन्हें Capy widget ने खुद भरा होता। इन्हें हूबहू वैसे ही सबमिट करें:

<input type="hidden" name="capy_captchakey"   value="PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v">
<input type="hidden" name="capy_challengekey" value="BalY2gJaI8uA2SGVOZhqBQ3V0CYSNNGP">
<input type="hidden" name="capy_answer"       value="0xax8ex0xax84x0xkx7qx0x18x76x0x1ix6sx">

इसमें कोई बदलाव न करें: answer स्ट्रिंग को न trim करें, न दोबारा एन्कोड करें और न किसी और तरह से साफ़ करें। यह वही ड्रैग पाथ है जो widget ने रिकॉर्ड किया होता, और टारगेट साइट का बैकएंड इसे उसी चैलेंज से मिलाकर जाँचता है जो उसने जारी किया था, इसलिए कोई भी बदलाव इसे अमान्य कर देता है।

challenge key सिर्फ़ एक बार इस्तेमाल होती है और कम समय तक चलती है। CapSkip हर solve के लिए नई key बनाता है और पहेली उसी से बंधी होती है, इसलिए तीनों वैल्यू को कैश करने के बजाय फ़ौरन सबमिट करें, और किसी भी challengekey को दूसरी बार सबमिट करने के लिए कभी दोबारा इस्तेमाल न करें।

टाइमिंग: बहुत जल्दी आने वाले जवाबों को Capy अस्वीकार कर देता है

Capy का यह वही हिस्सा है जो आपका पूरा दिन ले लेगा, अगर आप इसके लिए खुद इंटीग्रेशन बनाएँ। Capy पहेली जारी करने और जवाब मिलने के बीच का असली समय (wall clock) मापता है, और जो कुछ भी इंसानी क्षमता से परे लगे, उसे अस्वीकार कर देता है। यह अस्वीकार उसी मैसेज के साथ होता है जो किसी ग़लत जवाब पर मिलता है, इसलिए 200 मिलीसेकंड में लौटाया गया बिल्कुल सही हल भी किसी ख़राब सॉल्वर से अलग नहीं दिखता।

Capy के अपने sign in page पर, एक सही जवाब को स्थिर रखते हुए मापा गया:

पहेली से वेरिफ़िकेशन तक का समयनतीजा
0.48 secondsRefused
1.03 सेकंड और उससे ज़्यादा, 4 सेकंड तक टेस्ट किया गयाAccepted

इसीलिए CapSkip हर नतीजे को तब तक रोके रखता है जब तक पहेली बनने के बाद पर्याप्त समय बीत न जाए, लगभग मापी गई न्यूनतम सीमा से दोगुना, क्योंकि वह सीमा Capy की है और बदल सकती है। यह रोक हर solve पर अपने आप लागू होती है और इसमें कुछ भी configure करने की ज़रूरत नहीं है। इसकी क़ीमत latency है, throughput नहीं, और अगर आप नतीजे के लिए poll करते हैं तो यह दिखती तक नहीं, क्योंकि टास्क बस लगभग दो सेकंड लेता है।

Puzzle और Avatar

Capy दो challenge families पब्लिश करता है। ये अलग-अलग endpoints के पीछे अलग-अलग चैलेंज हैं, और CapSkip इनमें से एक को हल करता है।

versionChallengeसमर्थितविवरण
puzzleAssemble a puzzleहांडिफ़ॉल्ट, और लगभग हर deployment यही इस्तेमाल करता है। एक टुकड़े को खींचकर वापस उसी खाली जगह में ले जाया जाता है जहाँ से वह काटा गया था।
avatarDrag an objectनहींएक अलग challenge टाइप। इसका जवाब देने के बजाय इसे सबमिट के समय ही ERROR_BAD_PARAMETERS के साथ अस्वीकार कर दिया जाता है।

अगर आप कोई version नहीं भेजते, तो इसका मतलब होता है puzzle, इसलिए ज़्यादातर इंटीग्रेशन इसे कभी सेट ही नहीं करते। किसी avatar request को जान-बूझकर आज़माने के बजाय अस्वीकार कर दिया जाता है: उसे puzzle की तरह हल करने पर ऐसा solution मिलेगा जिसे टारगेट साइट अस्वीकार कर देगी, और यह एक साफ़ error से भी बुरा है, क्योंकि तब यह किसी असमर्थित चैलेंज जैसा नहीं, बल्कि फ़ेल होते सॉल्वर जैसा दिखता है।

friendly captcha solver Friendly Captcha

Friendly Captcha विज़िटर से कुछ करवाने के बजाय उसके ब्राउज़र से थोड़ी गणना करवाता है। क्लिक करने के लिए कोई छवि नहीं, कोई स्लाइडर नहीं और कोई ऑडियो फ़ॉलबैक नहीं, इसलिए स्क्रीन पर ग़लत करने को कुछ है ही नहीं। CapSkip वही token लौटाता है जो विजेट ने बनाया होता, और उसे आप सीधे अपने फ़ॉर्म के साथ सबमिट कर सकते हैं।

यह कैसे काम करता है

Friendly Captcha एक proof of work कैप्चा है। विजेट को एक difficulty सेटिंग दी जाती है, वह ऐसे मान खोजता है जिनका hash उससे नीचे आए, और परिणाम आपके फ़ॉर्म के एक छिपे हुए फ़ील्ड में लिख देता है। विज़िटर को कभी कुछ दिखाया ही नहीं जाता, और यही इस उत्पाद का मक़सद है: इसे इस्तेमाल करने वाला पेज ऐसा लगता है जैसे उस पर कोई कैप्चा हो ही नहीं।

इस एक ही नाम के नीचे दो बिल्कुल अलग प्रोटोकॉल आते हैं, और sitekey से यह पता नहीं चलता कि कोई साइट कौन सा इस्तेमाल करती है। इन दोनों में सिर्फ़ ब्रांड और sitekey का namespace साझा है, इसके अलावा कुछ नहीं। किसी भी इंटीग्रेशन को सबसे पहले यही सही तय करना होता है कि साइट इनमें से कौन सा चला रही है, इसलिए नीचे इसका अपना अलग अनुभाग है।

पूरा चक्र चार चरणों का है:

  1. लक्ष्य पेज से sitekey पढ़ें, और उसके साथ विजेट स्क्रिप्ट का URL भी।
  2. दोनों को इसके साथ सबमिट करें: /in.php के साथ method=friendly_captcha.
  3. जब तक token तैयार न हो जाए, तब तक /res.php को poll करते रहें।
  4. token को उस फ़ॉर्म फ़ील्ड में डालें जिसे विजेट ने खुद भरा होता, और फ़ॉर्म सबमिट कर दें।

इस method में हल का समय स्थिर नहीं होता। सेवा हर रिक्वेस्ट के लिए काम की मात्रा उसी क्षण तय करती है जब रिक्वेस्ट की जाती है, इसलिए वही sitekey किसी समय दूसरे समय की तुलना में काफ़ी ज़्यादा महँगा पड़ सकता है। किसी तय अवधि को मान लेने के बजाय अपनी पोलिंग में इसकी गुंजाइश रखें।

हल करने से पहले आपको क्या चाहिए

दो मान आवश्यक हैं, और एक तीसरा भी जब भी मिल सके भेजना उपयोगी रहता है।

पैरामीटरयह कहाँ से आता है
sitekeyThe data-sitekey विजेट एलिमेंट का एट्रिब्यूट, यानी वह एलिमेंट जिस पर यह मौजूद होता है: class="frc-captcha".
pageurlउस page का पूरा URL जिस पर widget दिखता है।
module_scriptThe src विजेट के उस स्क्रिप्ट टैग का, जिस पर यह मौजूद है: type="module"। आवश्यक नहीं, लेकिन CapSkip को यही बताता है कि साइट कौन सा प्रोटोकॉल वर्शन इस्तेमाल करती है, इसलिए अगर पेज पर यह मौजूद हो तो इसे भेजें।
Version 1 और Version 2

यही वह हिस्सा है जिसे छोड़ देने पर आपकी आधी दोपहर बरबाद होगी। दोनों वर्शन चालू हैं, दोनों इस्तेमाल में हैं, और एक के लिए रजिस्टर किया गया sitekey दूसरे के endpoint पर भी जवाब दे देता है। ग़लत वाला हल करेंगे तो आपको एक ठीक बना हुआ token मिलेगा जिसे लक्ष्य साइट अस्वीकार कर देगी, और कहीं कोई संकेत नहीं मिलेगा कि गड़बड़ी वर्शन की थी।

versionविजेट पैकेजसमर्थितविवरण
v1friendly-challengeहांमूल, ओपन सोर्स विजेट। इसकी स्क्रिप्ट है widget.module.min.js या widget.min.js। जब और कुछ न बताया गया हो तो डिफ़ॉल्ट यही रहता है।
v2@friendlycaptcha/sdkहांमौजूदा SDK। इसकी स्क्रिप्ट है site.min.js। जो पेज इसे लोड करता है वह v2 है, चाहे बाकी सब कुछ जैसा भी दिखे।

CapSkip वर्शन इसी क्रम में तय करता है, और पहला उत्तर मिलते ही रुक जाता है:

  1. The version पैरामीटर, अगर आपने भेजा हो। v1 और v2 यही वर्तनियाँ हैं; अकेला 1 या 2 भी स्वीकार किया जाता है।
  2. विजेट स्क्रिप्ट का URL, जो इनसे आता है: module_script या nomodule_script। यही सबसे भरोसेमंद संकेत है, क्योंकि यही वह बिल्ड है जिसे साइट असल में लोड करती है।
  3. दोनों न मिलने पर, v1.

CapSkip सेवा से यह नहीं पूछता कि कोई sitekey किस वर्शन का है, क्योंकि सेवा दोनों में से किसी के लिए भी जवाब दे देगी। आप स्वयं version, या स्क्रिप्ट URL भेज दें, तो यह सवाल कभी उठता ही नहीं।

Sitekey कहाँ मिलेगा

लक्ष्य पेज पर ब्राउज़र के डेवलपर टूल्स खोलें और विजेट एलिमेंट ढूँढ़ें। sitekey और स्क्रिप्ट पेज सोर्स में एक-दूसरे के पास ही होते हैं, और दोनों मिलकर वह सब दे देते हैं जो इस method को चाहिए।

<!-- Version 1: the friendly-challenge widget -->
<div class="frc-captcha" data-sitekey="FCMEXAMPLE1234AB"></div>
<script type="module" src="https://cdn.example.com/[email protected]/widget.module.min.js"></script>
<script nomodule src="https://cdn.example.com/[email protected]/widget.min.js"></script><!-- Version 2: the @friendlycaptcha/sdk widget -->
<div class="frc-captcha" data-sitekey="FCMEXAMPLE1234AB"></div>
<script type="module" src="https://cdn.example.com/@friendlycaptcha/[email protected]/site.min.js"></script>

कुछ डिप्लॉयमेंट स्क्रिप्ट को CDN के बजाय अपने ही डोमेन से देते हैं। मायने फ़ाइल का नाम रखता है, वह होस्ट नहीं जहाँ से वह आती है।

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
methodस्ट्रिंगहांहोना ही चाहिए friendly_captcha। बताता है कि आप एक Friendly Captcha सबमिट कर रहे हैं।
sitekeyस्ट्रिंगहांThe data-sitekey मान, जो लक्ष्य पेज पर विजेट एलिमेंट से पढ़ा जाता है।
pageurlस्ट्रिंगहांउस page का पूरा URL जिस पर widget दिखता है।
versionस्ट्रिंग
डिफ़ॉल्ट: v1
नहींप्रोटोकॉल वर्शन, v1 या v2। नीचे Version 1 और Version 2 ऊपर देखें।
module_scriptस्ट्रिंगनहींThe src विजेट के उस स्क्रिप्ट टैग का, जिस पर यह मौजूद है: type="module"। इसका उपयोग तब वर्शन तय करने के लिए किया जाता है जब version न भेजा गया हो।
nomodule_scriptस्ट्रिंगनहींThe src विजेट के उस स्क्रिप्ट टैग का, जिस पर यह मौजूद है: nomodule। इसे भी इसी कारण से पढ़ा जाता है।
api_serverस्ट्रिंगनहींकेवल CapSkip में। वह data residency endpoint जिससे यह sitekey संबंधित है। स्वीकार करता है: global (डिफ़ॉल्ट), eu, या कोई पूरा URL। देखें: डेटा रेजिडेंसी देखें।
useragentस्ट्रिंगनहींरिक्वेस्ट के साथ भेजा जाने वाला User-Agent। वैकल्पिक, और शायद ही कभी ज़रूरी।
proxyस्ट्रिंगनहींप्रॉक्सी का पता। ये formats स्वीकार्य हैं: IP:PORT, LOGIN:PASSWORD@IP:PORT या IP:PORT:LOGIN:PASSWORD.
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार: HTTP, HTTPS, SOCKS5 या SOCKS5H.
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।

CapSkip इस method के लिए प्रॉक्सी अनिवार्य नहीं करता, फिर भी इस पेज पर लगभग किसी भी दूसरी जगह की तुलना में यहाँ आपको प्रॉक्सी की ज़रूरत जल्दी पड़ेगी। सेवा हर रिक्वेस्ट के लिए काम की मात्रा खुद तय करती है, और जिन पतों को वह पहले से बहुत देख चुकी है उनके लिए यह आँकड़ा बढ़ा देती है: एक ही पते से एक sitekey पर मापने पर, परीक्षण के एक सत्र के दौरान difficulty सेटिंग लगातार बढ़ती गई, और एक नए पते तथा बहुत इस्तेमाल हो चुके पते के बीच प्रकाशित अंतर उसी token के लिए लगभग तीस गुना काम तक पहुँच जाता है। परीक्षण और कभी-कभार के हल के लिए एक पता ठीक है। उससे आगे CapSkip में एक प्रॉक्सी पूल कॉन्फ़िगर करें और उसे लोड बाँटने दें, या जब किसी हल का किसी ख़ास नेटवर्क से आना ज़रूरी हो तो प्रति-रिक्वेस्ट प्रॉक्सी भेजें।

अपने CapSkip API endpoint पर एक HTTP GET या POST request सबमिट करें (/in.php) के साथ method=friendly_captcha। फ़ॉर्म फ़ील्ड, query string और JSON body, तीनों एक ही फ़ील्ड नामों के साथ स्वीकार किए जाते हैं, क्योंकि इस method में अपलोड करने के लिए कोई छवि नहीं होती।

Friendly Captcha सबमिट करें (फ़ॉर्म फ़ील्ड):

curl -X POST \
-d "key=YOUR_API_KEY" \
-d "method=friendly_captcha" \
-d "sitekey=FCMEXAMPLE1234AB" \
-d "pageurl=https://www.example.com/signup" \
-d "version=v2" \
-d "json=1" \
http://127.0.0.1:8080/in.php

Friendly Captcha सबमिट करें (JSON body, स्पष्ट version के बजाय स्क्रिप्ट URL के साथ):

curl -X POST \
-H "Content-Type: application/json" \
-d '{
"key": "YOUR_API_KEY",
"method": "friendly_captcha",
"sitekey": "FCMEXAMPLE1234AB",
"pageurl": "https://www.example.com/signup",
"module_script": "https://cdn.example.com/@friendlycaptcha/[email protected]/site.min.js",
"nomodule_script": "https://cdn.example.com/@friendlycaptcha/[email protected]/site.compat.js",
"json": 1
}' \
http://127.0.0.1:8080/in.php

अगर सब कुछ सही है, तो CapSkip CAPTCHA ID को plain text के रूप में लौटाता है: OK|2122988149। अगर json=1 parameter भेजा गया था, तो इसके बजाय response एक JSON envelope होता है। दोनों ही स्थितियों में, लौटाया गया मान वही CAPTCHA ID है जिसके लिए आप result poll करते हैं।

{
"status": 1,
"request": "2122988149"
}

अन्यथा CapSkip एक उपयुक्त error code लौटाता है। गुम sitekey या अनुपयोगी पेज URL को पोलिंग के बाद नहीं, बल्कि सबमिट रिक्वेस्ट पर ही अस्वीकार कर दिया जाता है, ताकि आपको उसी रिक्वेस्ट पर पता चल जाए जो ग़लत थी।

लगभग 5 सेकंड प्रतीक्षा करें, फिर result endpoint (/res.php) पर आपको मिली CAPTCHA ID के साथ एक HTTP GET request भेजें।

GET request parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
keyस्ट्रिंगहाँ*आपकी CapSkip API key। सिर्फ़ तब ज़रूरी जब API Key सत्यापन सक्षम है।
actionस्ट्रिंगहांनिर्दिष्ट करें get कैप्चा का हल प्राप्त करने के लिए।
idपूर्णांकहांइसके द्वारा लौटाई गई CAPTCHA ID in.php request।
jsonपूर्णांक
डिफ़ॉल्ट: 0
नहीं0 response को plain text के रूप में लौटाता है। 1 response को JSON के रूप में लौटाता है।
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149&json=1"

अगर कैप्चा हल हो चुका है, तो CapSkip token को JSON फ़ॉर्मैट में लौटाता है। token यहाँ होता है: request, और solution.token उन क्लाइंट्स के लिए भी वही स्ट्रिंग रखता है जो उसे वहाँ पाने की उम्मीद करते हैं:

{
"status": 1,
"request": "c62c4da36bbaf7f253873035832709ef.aqwpWwdbzRWKY/UQAQwwpgAAAAAAAAAAM7hBvJOzqjc=.AAAAAArcCQABAAAAxv8QAAIAAACKYRgA.AgAB",
"solution": {
"token": "c62c4da36bbaf7f253873035832709ef.aqwpWwdbzRWKY/UQAQwwpgAAAAAAAAAAM7hBvJOzqjc=.AAAAAArcCQABAAAAxv8QAAIAAACKYRgA.AgAB"
},
"cost": "0.00299",
"createTime": 1789667786,
"endTime": 1789667807,
"errorId": 0,
"solveCount": 1
}

अगर आप नहीं भेजते json=1, तो वही token सादे टेक्स्ट में OK| उपसर्ग के बाद आता है, और यही वह है जो res.php को टेक्स्ट की तरह पढ़ने वाला क्लाइंट लौटाएगा:

OK|c62c4da36bbaf7f253873035832709ef.aqwpWwdbzRWKY/UQAQwwpgAAAAAAAAAAM7hBvJOzqjc=.AAAAAArcCQABAAAAxv8QAAIAAACKYRgA.AgAB

अगर CAPTCHA अभी तक हल नहीं हुआ है, तो CapSkip यह लौटाता है: CAPCHA_NOT_READY, ठीक इसी वर्तनी के साथ, जैसा हर दूसरे method पर होता है। 5 सेकंड प्रतीक्षा करें और request दोहराएँ।

हर परिणाम एक ही बार दिया जाता है। पहला सफल पोल token लौटाकर उसे हटा देता है, और उसी ID के लिए हर बाद का पोल खाली body लौटाता है, इसलिए token को उसी जवाब से सहेज लें जो उसे लेकर आया था।

दोनों वर्शन बहुत अलग आकार और लंबाई के token बनाते हैं। v1 token डॉट से अलग किए गए चार हिस्सों का होता है और कुछ सौ अक्षरों तक जाता है, जैसा ऊपर दिखाया गया है। v2 token एक अकेली अपारदर्शी स्ट्रिंग होती है जो इससे शुरू होती है: AQQA. और लगभग छह किलोबाइट लंबी होती है, इसलिए यह पक्का कर लें कि जो भी उसे ले जा रहा हो, चाहे कोई छिपा हुआ फ़ील्ड, डेटाबेस कॉलम या प्रॉक्सी से गुज़रने वाली रिक्वेस्ट, उसका आकार उतना हो।

Token सबमिट करना

token उसी छिपे हुए फ़ील्ड में जाता है जिसे विजेट ने खुद भरा होता, और दोनों वर्शन एक ही फ़ील्ड नाम इस्तेमाल नहीं करते। यही बात उन लोगों को फँसाती है जो चलता हुआ v1 इंटीग्रेशन किसी v2 साइट पर ले जाते हैं।

versionवह फ़ॉर्म फ़ील्ड जिसमें token जाता है
v1frc-captcha-solution
v2frc-captcha-response
<!-- वर्शन 1 -->
<input type="hidden" name="frc-captcha-solution" value="c62c4da3...AgAB"><!-- वर्शन 2 -->
<input type="hidden" name="frc-captcha-response" value="AQQA.vW7kd3CujKT8PaQgEcW18QaH...">

token को हूबहू सबमिट करें। उसे trim न करें, दोबारा एनकोड न करें और ऐसे अक्षर न हटाएँ जो padding जैसे लगते हों: उसका हर हिस्सा उसी चैलेंज के विरुद्ध जाँचा जाता है जिसके लिए वह जारी हुआ था, इसलिए कोई भी बदलाव उसे अमान्य कर देता है।

कोई भी साइट उस फ़ील्ड का नाम बदल सकती है, और कुछ बदलती भी हैं। जिस पेज से आप इंटीग्रेट कर रहे हैं अगर वह कोई दूसरा नाम इस्तेमाल करता है, तो नाम विजेट एलिमेंट से पढ़ें और वही इस्तेमाल करें। अगर पेज विजेट के लिए कोई callback परिभाषित करता है, तो उसे token के साथ एकमात्र आर्गुमेंट के रूप में कॉल करने से भी वही काम हो जाता है।

डेटा रेजिडेंसी

Friendly Captcha अलग-अलग data residency क्षेत्रों के लिए अलग endpoint चलाता है, और हर sitekey उनमें से किसी एक का होता है। दोनों ही एक ही sitekey के लिए token जारी कर देंगे, इसलिए ग़लत endpoint पर रिक्वेस्ट भेजने से ऐसा token बनता है जो यहाँ बिल्कुल सही दिखता है और लक्ष्य साइट उसे ठुकरा देती है, बिना इससे ज़्यादा कुछ बताए कि सत्यापन विफल रहा।

विजेट अपना क्षेत्र इस data-api-endpoint एट्रिब्यूट में बताता है। अगर लक्ष्य पेज पर यह मौजूद हो, तो वही मान इस रूप में भेजें: api_server. यह पैरामीटर केवल CapSkip में है और कहीं और इसका कोई समकक्ष नहीं है, इसलिए किसी दूसरी सेवा के लिए लिखा गया क्लाइंट इसे नहीं भेजेगा: जब लक्ष्य पेज किसी क्षेत्रीय endpoint पर हो, तो इसे आप स्वयं जोड़ें।

api_serverयह क्या चुनता है
globalडिफ़ॉल्ट। तब इस्तेमाल होता है जब यह एट्रिब्यूट मौजूद न हो, जो आम स्थिति है।
euयूरोपीय endpoint, जिसे इससे चुना जाता है: data-api-endpoint="eu".
A full URLस्वयं होस्ट किया गया या किसी और तरह का कस्टम डिप्लॉयमेंट। endpoint को ठीक वैसे ही भेजें जैसे पेज उसे देता है।

प्रॉक्सी का उपयोग

reCAPTCHA v2, v3, Invisible, Enterprise और Cloudflare के लिए, आप हर task के साथ एक प्रॉक्सी भेज सकते हैं। CapSkip उस कैप्चा को CapSkip application में कॉन्फ़िगर किए गए proxy pool का इस्तेमाल करने के बजाय उस प्रॉक्सी के ज़रिए हल करेगा।

यह तब उपयोगी है जब लक्षित वेबसाइट जाँचती है कि कैप्चा token उसी IP address से बना है जिससे आपकी अपनी requests आती हैं, उदाहरण के लिए, Cloudflare के पीछे की साइटें, सख़्त reCAPTCHA scoring, या geo-restricted पेज।

POST Request Parameters की सूची
पैरामीटरप्रकारआवश्यकविवरण
proxyस्ट्रिंगनहींप्रॉक्सी पता। IP authentication के लिए format: IP:PORT (उदाहरण: 123.123.123.123:3128). login/password authentication के लिए format: login:password@IP:PORT
proxytypeस्ट्रिंगनहींप्रॉक्सी का प्रकार। समर्थित values: HTTP, HTTPS, SOCKS5, SOCKS5H। डिफ़ॉल्ट: HTTP जब proxy प्रदान किया गया है पर proxytype छोड़ दिया जाता है।

एरर कोड

कोडअर्थ
ERROR_KEY_DOES_NOT_EXISTअमान्य API key।
ERROR_WRONG_USER_KEYAPI key गायब या खाली है।
ERROR_WRONG_METHODअमान्य HTTP method या action पैरामीटर।
ERROR_WRONG_ID_FORMATअमान्य कैप्चा ID फॉर्मैट।
ERROR_BAD_PARAMETERSआवश्यक parameters गायब या अमान्य हैं।
ERROR_UPLOADकोई image data नहीं दिया गया या अपलोड नाकाम रहा।
ERROR_INVALID_IMAGEअमान्य image format या दूषित image डेटा।
ERROR_INVALID_BASE64अमान्य base64 एन्कोडिंग।
ERROR_TOO_BIG_CAPTCHA_FILESIZEइमेज का साइज़ 600 kB से अधिक है या आयाम 1000px से अधिक हैं।
ERROR_CAPTCHA_UNSOLVABLEकैप्चा हल करने में विफल। एक नया task सबमिट करें और पुनः प्रयास करें।
ERROR_GOOGLEKEYअमान्य googlekey पैरामीटर।
ERROR_PAGEURLअमान्य pageurl पैरामीटर।
ERROR_ZERO_BALANCEइस method के लिए API key में कोई credits नहीं बचे हैं।
ERROR_PROXY_FORMATThe proxy value को parse नहीं किया जा सका।
CAPCHA_NOT_READYकैप्चा अभी भी प्रोसेस हो रहा है। पोल करते रहें।
(खाली response)परिणाम पहले ही प्राप्त किया जा चुका है, या ID मौजूद नहीं है।