ERROR_KEY_DOES_NOT_EXIST und Wrong User Key beheben

error_key_does_not_exist - How to Fix ERROR_KEY_DOES_NOT_EXIST and Wrong User Key

Kurze Antwort: ERROR_KEY_DOES_NOT_EXIST bedeutet, dass der API-Schlüssel in Ihrer Anfrage kein Schlüssel ist, den der Solver kennt. Mit dem Captcha, dem sitekey und der Seiten-URL ist alles in Ordnung. Die Anfrage kam nie bis zum Lösen. Dieser Leitfaden behandelt die drei tatsächlichen Ursachen, die Korrektur in allen vier SDKs und warum Sie manchmal stattdessen ERROR_WRONG_USER_KEY erhalten.

Was ERROR_KEY_DOES_NOT_EXIST bedeutet

Er kommt von /in.phpzurück, beim Absenden, noch bevor das Lösen beginnt. Die API hat den Parameter key aus Ihrer Anfrage mit dem Schlüssel verglichen, den sie akzeptieren soll, und keine Übereinstimmung gefunden.

# 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

Weil er bereits beim Absenden zurückkommt, erhalten Sie nie eine Captcha-ID, und damit gibt es auf /res.phpauch nichts abzufragen. Wenn Ihr Code in einer Schleife wartet, wartet er auf eine ID, die nie vergeben wurde.

Ein Punkt, über den Umsteiger von einem gehosteten Dienst stolpern: CapSkip ist eine 2Captcha-kompatible API, die auf Ihrem eigenen Rechner läuft, der Schlüssel ist also keine Kontozugangsdaten und an kein Guthaben gebunden. Er ist eine lokale Zugriffsprüfung auf dem API-Server. Das verändert, was “falscher Schlüssel” überhaupt bedeuten kann, und genau deshalb sind die Korrekturen unten so kurz.

Prüfen Sie zuerst, ob die Schlüsselprüfung überhaupt aktiv ist

Bei CapSkip ist die Schlüsselprüfung optional. Ist sie aus, funktioniert jede nicht leere Zeichenkette und Sie sehen diesen Fehler nie. Ist sie an, muss der Schlüssel exakt übereinstimmen.

Öffnen Sie die CapSkip-App, gehen Sie zu Settings und sehen Sie sich den Bereich API server an. Zwei Dinge zählen dort: ob die Schlüsselprüfung aktiviert ist und, falls ja, die exakte Schlüsselzeichenkette. Kopieren Sie den Schlüssel aus diesem Fenster, statt ihn abzutippen. Die meisten Meldungen zu ERROR_KEY_DOES_NOT_EXIST enden hier.

Wenn Sie schon in den Settings sind, prüfen Sie auch gleich den Port. Ein falscher Port erzeugt einen Verbindungsfehler statt diesen hier, aber beides zusammen zu prüfen lohnt sich. Einrichtungsanleitung führt durch das gesamte Fenster.

Den Schlüssel in jedem SDK korrekt übergeben

Alle vier SDKs verwenden denselben Optionsnamen und lesen dieselbe Umgebungsvariable, CAPSKIP_API_KEY. Setzen Sie sie beim Debuggen explizit, damit kein Zweifel bleibt, was tatsächlich gesendet wird.

# 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);

Die vollständigen Signaturen aller Methoden finden Sie auf der Seite SDK zum Captcha-Lösen .

Die drei Ursachen, die sich zu prüfen lohnen

1. Der Schlüssel hat Ihren Code nie verlassen

Sie haben CAPSKIP_API_KEY in einer .env -Datei gesetzt, aber zur Laufzeit lädt nichts die .env -Datei. Oder Sie haben sie in einer Shell exportiert und das Skript in einer anderen ausgeführt. Das SDK fällt auf seinen Standardwert zurück, der Standardwert ist nicht Ihr Schlüssel, und schon erscheint der Fehler.

Geben Sie aus, was Sie gleich senden. Eine Zeile, und die Frage ist geklärt:

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]))

Die Länge auszugeben deckt den Fall auf, den ein maskierter Wert verbirgt: einen Schlüssel, der vorhanden, aber leer ist, oder einen mit einem angehängten Zeilenumbruch aus cat key.txt.

2. Der Schlüssel stimmt, wird aber in der URL zerstört

Das trifft nur, wer die rohe API aufruft. Enthält Ihr Schlüssel Zeichen mit einer Bedeutung in einem Query-String, müssen sie prozentkodiert werden. Ein + wird zu einem Leerzeichen, ein & beendet den Parameter vorzeitig, und ein # schneidet alles danach ab.

# 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"

Oder senden Sie die Parameter stattdessen als Formular-Body per POST, was diese ganze Problemklasse umgeht. MDN hat eine kurze Referenz zur Prozentkodierung , falls Sie die genaue Zeichenliste brauchen. Die SDKs kodieren für Sie, diese Ursache verschwindet also in dem Moment, in dem Sie auf ein SDK umsteigen.

3. Sie haben den Schlüssel geändert, und etwas hält noch den alten

Ein langlaufender Worker, ein Docker-Container mit fest eingebautem Schlüssel, ein CI-Secret, eine separat konfigurierte Browser-Erweiterung. Die App hat den neuen Schlüssel, ein Aufrufer hat noch den alten, und nur dieser eine schlägt fehl. Wenn ein Teil Ihrer Anfragen funktioniert und ein anderer nicht, ist es fast immer das.

ERROR_KEY_DOES_NOT_EXIST vs ERROR_WRONG_USER_KEY

Zwei Fehlerzeichenketten, dieselbe Familie. Behandeln Sie sie als ein Problem in zwei Formen.

FehlerWorauf er hindeutetWas zuerst zu prüfen ist
ERROR_KEY_DOES_NOT_EXISTDer Schlüssel wurde gelesen und stimmte mit keinem bekannten Schlüssel übereinDie Schlüsselzeichenkette selbst, aus den Settings kopiert
ERROR_WRONG_USER_KEYDie Schlüsselprüfung ist an und der gesendete Schlüssel ist falschOb die Prüfung überhaupt an ist, danach die Zeichenkette

In den SDKs treten beide als ApiExceptionauf, fangen Sie also diesen einen Typ ab und lesen Sie die Meldung, statt über die Zeichenkette zu verzweigen.

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)

Benachbarte Fehlercodes

Wenn der Schlüssel stimmt, sehen die nächsten Fehlschläge beim Absenden ähnlich aus, bedeuten aber etwas völlig anderes.

CodeUrsacheBeheben
ERROR_WRONG_METHODThe method -Parameter fehlt oder ist falsch geschriebenVerwenden userrecaptcha, turnstile, geetest, post oder base64
ERROR_BAD_PARAMETERSEin für diese Methode erforderlicher Parameter fehltPrüfen Sie die Parameterliste der Methode, bevor Sie erneut senden
ERROR_GOOGLEKEYDer sitekey wurde abgelehntLesen Sie es erneut von der Live-Seite, nicht aus dem zwischengespeicherten Quellcode
ERROR_PAGEURLDie Seiten-URL fehlt oder ist fehlerhaftSenden Sie die vollständige URL samt Schema
Connection refusedDie App läuft nicht oder der Port weicht abCapSkip starten, prüfen ob der API server an ist

Jeder Code, den die API zurückgeben kann, ist in der API-Dokumentation.

Häufig gestellte Fragen

Brauche ich überhaupt einen API-Schlüssel?

Nur wenn die Schlüsselprüfung in der App aktiviert ist. Ist sie aus, wird jede nicht leere Zeichenkette akzeptiert und der SDK-Standardwert capskip funktioniert einwandfrei. Der Schlüssel ist eine lokale Zugriffsprüfung, kein Konto.

Kann ERROR_KEY_DOES_NOT_EXIST bedeuten, dass mein Guthaben aufgebraucht ist?

Nein. Es gibt kein Guthaben, das aufgebraucht werden könnte. Gelöst wird auf Ihrem eigenen Rechner, ein Schlüsselfehler ist deshalb immer eine Abweichung zwischen dem, was Sie gesendet haben, und dem, was die App erwartet.

Gehört der Schlüssel auch in die Abfrage?

Ja. /res.php nimmt denselben key -Parameter entgegen wie /in.php. Wenn Sie nur den Sende-Aufruf korrigiert haben, kann die Abfrage weiterhin am alten Wert scheitern.

Warum funktioniert mein alter 2Captcha-Schlüssel hier nicht?

Weil er von deren Dienst ausgestellt wurde und für einen Solver auf Ihrem Rechner nichts bedeutet. Die API-Form ist dieselbe, die Zugangsdaten sind es nicht. Richten Sie Ihren Client auf 127.0.0.1 und verwenden Sie den Schlüssel aus den CapSkip Settings.

Zusammenfassung

Prüfen Sie, ob die Schlüsselprüfung an ist, kopieren Sie den Schlüssel aus den Settings statt ihn abzutippen, vergewissern Sie sich, dass der Wert Ihren Prozess wirklich erreicht, und kodieren Sie ihn korrekt, wenn Sie die URL von Hand bauen. Das deckt praktisch jedes Auftreten von error_key_does_not_exist.

Diese ganze Problemklasse schrumpft, wenn der Solver ein lokaler Captcha-Löser ist, den Sie kontrollieren: kein Konto, kein Guthaben, keine rotierenden Zugangsdaten und ein Schlüssel, den Sie auf dem Bildschirm vor sich ablesen können.