ERROR_KEY_DOES_NOT_EXIST और Wrong User Key कैसे ठीक करें

error_key_does_not_exist - How to Fix ERROR_KEY_DOES_NOT_EXIST and Wrong User Key

संक्षिप्त जवाब: ERROR_KEY_DOES_NOT_EXIST का मतलब है कि आपके अनुरोध में मौजूद API की, सॉल्वर द्वारा पहचानी जाने वाली की नहीं है। कैप्चा, sitekey या पेज URL में कोई गड़बड़ी नहीं है। अनुरोध हल होने के चरण तक पहुँचा ही नहीं। यह गाइड इसके तीन असली कारण, चारों SDK में इसका समाधान, और यह बताती है कि कभी-कभी इसके बजाय ERROR_WRONG_USER_KEY क्यों मिलता है।

ERROR_KEY_DOES_NOT_EXIST का क्या मतलब है

यह /in.phpसे, सबमिट के समय, किसी भी हल की शुरुआत से पहले ही लौटता है। API ने आपके अनुरोध के key पैरामीटर की तुलना उस की से की जिसे स्वीकार करने के लिए वह कॉन्फ़िगर है, और कोई मेल नहीं मिला।

# Submitting with a key the app does not know:
curl "http://127.0.0.1:8080/in.php?key=WRONG&method=userrecaptcha&googlekey=YOUR_SITEKEY&pageurl=https://example.com"

ERROR_KEY_DOES_NOT_EXIST

चूँकि यह सबमिट के समय ही लौट आता है, आपको कभी captcha ID मिलती ही नहीं, इसलिए /res.phpपर पोल करने के लिए कुछ बचता ही नहीं। अगर आपका कोड लूप में इंतज़ार कर रहा है, तो वह ऐसी ID का इंतज़ार कर रहा है जो कभी जारी ही नहीं हुई।

होस्टेड सेवा से आने वालों को एक बात उलझाती है: CapSkip एक 2Captcha-संगत API है जो आपकी अपनी मशीन पर चलता है, इसलिए यह की कोई खाता क्रेडेंशियल नहीं है और न ही किसी बैलेंस से जुड़ी है। यह API सर्वर पर सिर्फ़ एक लोकल एक्सेस जाँच है। इससे “गलत की” का मतलब ही बदल जाता है, और यही वजह है कि नीचे दिए समाधान इतने छोटे हैं।

पहले देखें कि की वैलिडेशन चालू भी है या नहीं

CapSkip में की वैलिडेशन वैकल्पिक है। बंद होने पर कोई भी गैर-खाली स्ट्रिंग चल जाती है और यह त्रुटि आपको कभी नहीं दिखेगी। चालू होने पर की का बिल्कुल मेल खाना ज़रूरी है।

CapSkip ऐप खोलें, Settings में जाएँ और API server सेक्शन देखें। वहाँ दो बातें मायने रखती हैं: की वैलिडेशन चालू है या नहीं, और चालू है तो की की सटीक स्ट्रिंग। की को दोबारा टाइप करने के बजाय उसी स्क्रीन से कॉपी करें। ERROR_KEY_DOES_NOT_EXIST की ज़्यादातर रिपोर्टें यहीं खत्म हो जाती हैं।

जब Settings में हैं ही, तो पोर्ट भी जाँच लें। गलत पोर्ट पर यह नहीं, बल्कि कनेक्शन त्रुटि मिलती है, फिर भी दोनों एक साथ देख लेना ठीक रहता है। सेटअप गाइड इस पूरी स्क्रीन को विस्तार से समझाती है।

हर SDK में की सही तरीके से पास करना

चारों SDK एक ही ऑप्शन नाम लेते हैं और चारों एक ही एनवायरनमेंट वेरिएबल पढ़ते हैं, CAPSKIP_API_KEY। डिबग करते समय इसे स्पष्ट रूप से सेट करें ताकि यह संदेह न रहे कि भेजा क्या जा रहा है।

# pip install capskip
from capskip import CapSkip

# apiKey defaults to "capskip", which only works when
# key validation is turned off in the app.
solver = CapSkip(
    apiKey="YOUR_API_KEY",
    host="127.0.0.1",
    port=8080,
)
// npm install capskip
const { CapSkip } = require('capskip');

const solver = new CapSkip({
  apiKey: 'YOUR_API_KEY',
  host: '127.0.0.1',
  port: 8080,
});
// composer require capskip/capskip
use CapSkip\CapSkip;

$solver = new CapSkip([
    'apiKey' => 'YOUR_API_KEY',
    'host'   => '127.0.0.1',
    'port'   => 8080,
]);
// dotnet add package CapSkip
using CapSkip;

var solver = new CapSkipClient(
    apiKey: "YOUR_API_KEY",
    host:   "127.0.0.1",
    port:   8080);

हर मेथड के पूरे सिग्नेचर कैप्चा हल करने वाला SDK पेज पर हैं।

जाँचने लायक तीन कारण

1. की आपके कोड से बाहर निकली ही नहीं

आपने CAPSKIP_API_KEY को एक .env फ़ाइल में सेट किया, लेकिन रनटाइम पर .env को कोई लोड ही नहीं करता। या आपने उसे एक शेल में export किया और स्क्रिप्ट दूसरे शेल में चलाई। SDK अपने डिफ़ॉल्ट पर लौट जाता है, डिफ़ॉल्ट आपकी की नहीं है, और त्रुटि मिल जाती है।

जो भेजने जा रहे हैं उसे प्रिंट कर लें। एक लाइन, और बात साफ़:

import os

# Never print the whole key in a shared log.
key = os.environ.get("CAPSKIP_API_KEY", "<unset>")
print(len(key), repr(key[:4]))

लंबाई प्रिंट करने से वह स्थिति पकड़ में आती है जिसे मास्क किया गया मान छिपा लेता है: ऐसी की जो मौजूद तो है पर खाली है, या जिसके अंत में न्यूलाइन लगी है, जैसे cat key.txt.

2. की सही है, पर URL में बिगड़ जाती है

यह सिर्फ़ उन्हें परेशान करता है जो सीधे रॉ API कॉल करते हैं। अगर आपकी की में ऐसे अक्षर हैं जिनका क्वेरी स्ट्रिंग में कोई अर्थ है, तो उन्हें परसेंट-एनकोड करना ज़रूरी है। एक + स्पेस बन जाता है, एक & पैरामीटर को समय से पहले खत्म कर देता है, और एक # उसके बाद का सब कुछ काट देता है।

# Wrong: curl sends this raw and the key gets cut at the &
curl "http://127.0.0.1:8080/in.php?key=ab&cd&method=userrecaptcha"

# Right: let curl encode the parameter for you
curl -G http://127.0.0.1:8080/in.php \
  --data-urlencode "key=ab&cd" \
  --data-urlencode "method=userrecaptcha"

या फिर पैरामीटर को फ़ॉर्म बॉडी के रूप में POST करें, जिससे यह पूरी श्रेणी की समस्या ही टल जाती है। अगर आपको अक्षरों की सटीक सूची चाहिए तो MDN पर परसेंट-एनकोडिंग पर एक छोटा संदर्भ मौजूद है। SDK आपके लिए एनकोड कर देते हैं, इसलिए जिस पल आप SDK अपनाते हैं, यह कारण खत्म हो जाता है।

3. आपने की बदल दी, पर कोई चीज़ अब भी पुरानी थामे है

लंबे समय चलने वाला worker, ऐसा Docker कंटेनर जिसमें की बेक हो गई हो, CI का कोई secret, अलग से कॉन्फ़िगर किया गया ब्राउज़र एक्सटेंशन। ऐप के पास नई की है, किसी एक कॉलर के पास अब भी पुरानी है, और सिर्फ़ वही फेल होता है। अगर आपके कुछ अनुरोध चलते हैं और कुछ नहीं, तो कारण लगभग हमेशा यही होता है।

ERROR_KEY_DOES_NOT_EXIST vs ERROR_WRONG_USER_KEY

दो त्रुटि स्ट्रिंग, एक ही परिवार। इन्हें एक ही समस्या के दो रूप मानकर चलें।

त्रुटियह किस ओर इशारा करती हैसबसे पहले क्या जाँचें
ERROR_KEY_DOES_NOT_EXISTकी पढ़ी गई और किसी ज्ञात की से मेल नहीं खाईखुद की स्ट्रिंग, Settings से कॉपी की हुई
ERROR_WRONG_USER_KEYकी वैलिडेशन चालू है और भेजी गई की गलत हैपहले यह कि वैलिडेशन चालू है या नहीं, फिर स्ट्रिंग

SDK में दोनों ApiExceptionके रूप में सामने आते हैं, इसलिए स्ट्रिंग पर ब्रांच करने के बजाय इसी एक टाइप को पकड़ें और मैसेज पढ़ें।

from capskip import CapSkip, ApiException, NetworkException

solver = CapSkip(apiKey="YOUR_API_KEY")

try:
    result = solver.recaptcha(
        sitekey="YOUR_SITEKEY",
        url="https://example.com/page-with-recaptcha",
    )
except ApiException as e:
    # Key problems land here, with the raw code in the message.
    print("api rejected the request:", e)
except NetworkException as e:
    # The app is not running, or the port is wrong.
    print("cannot reach capskip:", e)

आस-पास के त्रुटि कोड

अगर की ठीक है, तो सबमिट के समय आने वाली अगली कुछ विफलताएँ दिखने में मिलती-जुलती हैं, पर उनका मतलब बिल्कुल अलग है।

कोडकारणफिक्स
ERROR_WRONG_METHODThe method पैरामीटर गायब है या गलत लिखा हैउपयोग करें userrecaptcha, turnstile, geetest, post या base64
ERROR_BAD_PARAMETERSउस मेथड के लिए ज़रूरी कोई पैरामीटर मौजूद नहीं हैदोबारा भेजने से पहले मेथड की पैरामीटर सूची जाँच लें
ERROR_GOOGLEKEYsitekey अस्वीकार कर दिया गयाइसे लाइव पेज से फिर से पढ़ें, cached source से नहीं
ERROR_PAGEURLपेज URL गायब है या गलत बना हैस्कीम सहित पूरा URL भेजें
Connection refusedऐप चल नहीं रहा या पोर्ट अलग हैCapSkip शुरू करें, देखें कि API server चालू है

API जो भी कोड लौटा सकता है, वे सब API डॉक्युमेंटेशन.

अक्सर पूछे जाने वाले सवाल

क्या मुझे API की की ज़रूरत है भी?

सिर्फ़ तब, जब ऐप में की वैलिडेशन चालू हो। बंद होने पर कोई भी गैर-खाली स्ट्रिंग स्वीकार होती है और SDK का डिफ़ॉल्ट capskip ठीक काम करता है। यह की एक लोकल एक्सेस जाँच है, कोई खाता नहीं।

क्या ERROR_KEY_DOES_NOT_EXIST का मतलब यह हो सकता है कि मेरा क्रेडिट खत्म हो गया?

नहीं। यहाँ खत्म होने के लिए कोई बैलेंस है ही नहीं। हल आपकी अपनी मशीन पर होता है, इसलिए की त्रुटि हमेशा इस बात का बेमेल होती है कि आपने क्या भेजा और ऐप क्या अपेक्षा करता है।

क्या की पोल अनुरोध में भी जाती है?

हाँ। /res.php वही key पैरामीटर लेता है जो /in.phpलेता है। अगर आपने सिर्फ़ सबमिट कॉल ठीक किया है, तो पोल अब भी पुराने मान पर फेल हो सकता है।

मेरी पुरानी 2Captcha की यहाँ क्यों काम नहीं करती?

क्योंकि वह उनकी सेवा ने जारी की थी और आपकी मशीन पर चल रहे सॉल्वर के लिए उसका कोई अर्थ नहीं है। API का ढाँचा वही है, क्रेडेंशियल वही नहीं। अपने क्लाइंट को 127.0.0.1 पर पॉइंट करें और CapSkip Settings वाली की इस्तेमाल करें।

सारांश

देखें कि की वैलिडेशन चालू है या नहीं, की को दोबारा टाइप करने के बजाय Settings से कॉपी करें, पक्का करें कि मान सचमुच आपकी प्रोसेस तक पहुँच रहा है, और अगर URL हाथ से बना रहे हैं तो उसे ठीक से एनकोड करें। इससे व्यावहारिक रूप से error_key_does_not_exist.

जब सॉल्वर आपके अपने नियंत्रण वाला लोकल captcha सॉल्वर हो, तो यह पूरी श्रेणी की समस्या छोटी हो जाती है: कोई खाता नहीं, कोई बैलेंस नहीं, घूमते हुए क्रेडेंशियल नहीं, बस एक की जिसे आप अपने सामने की स्क्रीन पर पढ़ सकते हैं।