ERROR_GOOGLEKEY und ERROR_PAGEURL beim Einreichen beheben

error_googlekey - How to Fix ERROR_GOOGLEKEY and ERROR_PAGEURL on Submit

Kurze Antwort: ERROR_GOOGLEKEY bedeutet, dass der Wert googlekey abgelehnt wurde, den Sie gesendet haben, und ERROR_PAGEURL bedeutet, dass der Wert pageurl abgelehnt wurde. Beide kommen von /in.php beim Einreichen, es wurde also keine Aufgabe angelegt und es gibt keine Captcha-ID zum Abfragen. In neun von zehn Fällen liegt es am Parameternamen: reCAPTCHA will googlekey, Turnstile will sitekey, und wer den falschen sendet, bekommt genau das. So unterscheiden Sie die beiden und beheben jeden Fall.

Was die beiden Codes tatsächlich prüfen

CodeDokumentierte BedeutungWelcher Parameter
ERROR_GOOGLEKEYUngültig googlekey -Parameter ist ungültigDer sitekey, den Sie von der Seite lesen
ERROR_PAGEURLUngültig pageurl -Parameter ist ungültigDie URL der Seite, auf der das Widget sitzt

Das sind Validierungsfehler, keine Lösungsfehler. Es wurde noch nichts versucht und nichts steht in der Warteschlange.

Einreichzeit, nicht Abfragezeit

Diese Unterscheidung spart viel Debugging. Die API hat zwei Stufen, und jede erzeugt ihre eigene Fehlerfamilie.

# Stage 1: submit. These codes appear HERE.
curl -X POST http://127.0.0.1:8080/in.php \
  -d "key=YOUR_API_KEY" -d "method=userrecaptcha" \
  -d "sitekey=YOUR_SITEKEY" \
  -d "pageurl=https://example.com/page-with-recaptcha"

ERROR_GOOGLEKEY   # no ID came back, so there is nothing to poll

Vergleichen Sie das mit einem gesunden Einreichen, das OK|2122988149 zurückgibt und dann, wenn überhaupt, erst bei /res.phpscheitert. Ein Fehlschlag zur Abfragezeit heißt, dass Ihre Parameter akzeptiert wurden und die Lösung selbst nicht geklappt hat, was eine völlig andere Untersuchung ist. Siehe ERROR_CAPTCHA_UNSOLVABLE dazu, und ERROR_KEY_DOES_NOT_EXIST , falls der Schlüssel selbst schon vor beiden Prüfungen abgelehnt wird.

Warum der Wert abgelehnt wird

Drei Ursachen decken fast alle Fälle ab, in dieser Reihenfolge.

Ursache eins: googlekey gegen sitekey

Die 2captcha-kompatible API verwendet je Methode einen anderen Parameternamen, und die sind nicht austauschbar.

MethodeSchlüsselparameterFalscher Name ergibt
userrecaptchagooglekeyERROR_GOOGLEKEY
turnstilesitekeyERROR_BAD_PARAMETERS
geetestgt plus challengeERROR_BAD_PARAMETERS

Die Falle: Im Gespräch nennen alle den Wert sitekey, und das HTML-Attribut heißt bei reCAPTCHA wie bei Turnstile buchstäblich data-sitekey . Nur der Einreich-Parameter von reCAPTCHA ist nach Google benannt. Wenn Sie einen funktionierenden Turnstile-Aufruf kopiert und dabei method zu userrecaptchageändert haben, ist das Ihr Fehler.

Die SDKs verbergen den Unterschied vollständig. solver.recaptcha(sitekey, url) und solver.turnstile(sitekey, url) nehmen dasselbe erste Argument und bilden es für Sie auf den richtigen Namen auf der Leitung ab, was ein guter Grund ist, eines davon zu nutzen.

Ursache zwei: Der Schlüssel ist veraltet, abgeschnitten oder leer

Wenn der Parametername stimmt, ist der Wert selbst der nächste Verdächtige.

  • Sie haben ihn fest einkodiert. Seiten wechseln ihre sitekeys. Eine Konstante, die letzten Monat funktionierte, kann heute tot sein.
  • Er stammt aus zwischengespeichertem Seitenquelltext. Die Quelltextansicht im Browser kann Ihnen eine ältere Kopie liefern als die, aus der das Widget tatsächlich gerendert wurde.
  • Sie haben das falsche Attribut gegriffen. Der Wert steht in data-sitekey, nicht in id, name oder im iframe-Attribut title.
  • Eine Shell-Variable hat einen Zeilenumbruch mitgebracht. Kommandosubstitution behält abschließende Leerzeichen, und Leerzeichen gehören nicht zu einem gültigen Schlüssel.
  • Er ist leer. Eine nicht gesetzte Variable expandiert zu nichts, und die Anfrage geht raus mit googlekey=.

Lesen Sie ihn aus dem lebenden DOM, statt einer Konstante zu vertrauen:

// Run in the page, or via your automation tool's evaluate().
// reCAPTCHA and Turnstile both expose it as data-sitekey.
const recaptchaKey = document.querySelector('.g-recaptcha')?.dataset.sitekey;
const turnstileKey = document.querySelector('.cf-turnstile')?.dataset.sitekey;

// Fallback: reCAPTCHA also carries it as k= in the widget iframe URL.
const iframe = document.querySelector('iframe[src*="/recaptcha/"]');
const fromSrc = iframe ? new URL(iframe.src).searchParams.get('k') : null;

console.log(recaptchaKey || fromSrc);

The k= -Fallback ist auf Seiten wichtig, die das Widget per JavaScript rendern und nie ein .g-recaptcha -Element im DOM hinterlassen.

Ursache drei: Was eine pageurl ungültig macht

ERROR_PAGEURL ist ein engeres Problem und meist mechanisch.

  • Kein Schema. example.com/login ist keine URL. Senden Sie https://example.com/login.
  • Ein relativer Pfad. /login ist das, was Ihr Scraper zur Hand hatte, nicht das, was die API braucht.
  • GET-Abschneidung. Wenn die Seiten-URL eine eigene Query-Zeichenkette enthält und Sie sie unkodiert per GET einreichen, wird alles nach dem ersten Und-Zeichen als Parameter Ihres API-Aufrufs gelesen. Nehmen Sie POST, oder nutzen Sie --data-urlencode.
  • Leerzeichen oder Anführungszeichen. Eine aus einer Konfigurationsdatei gelesene URL kann in Anführungszeichen ankommen, die nie entfernt wurden.

Die URL muss von der Maschine, auf der CapSkip läuft, nicht erreichbar sein, und sie muss nicht die URL sein, an die Sie das Formular am Ende schicken. Sie muss die Seite sein, in die das Widget eingebettet ist, denn daran wird das Token gebunden.

Wie das aus einem SDK aussieht

Die SDKs prüfen offensichtliche Probleme, bevor irgendetwas Ihren Prozess verlässt, und reichen den Rest durch. Zwei verschiedene Ausnahmen, zwei verschiedene Lösungen.

# pip install capskip
from capskip import CapSkip, ApiException, ValidationException

solver = CapSkip(host="127.0.0.1", port=8080)

try:
    result = solver.recaptcha(
        sitekey=sitekey_from_dom,
        url="https://example.com/page-with-recaptcha",
    )
except ValidationException:
    # Caught locally: empty sitekey, malformed URL, missing argument.
    print("fix the values before sending")
except ApiException as e:
    # Came back from the API: GOOGLEKEY or PAGEURL rejected.
    print(f"rejected at submit: {e}")

A ValidationException heißt, Sie haben die API nie erreicht. Eine ApiException mit einem dieser Codes heißt, Sie haben sie erreicht, und der Wert wurde abgewiesen. Dieselbe Idee in C#, wobei der Basistyp die Arbeit macht:

using CapSkip;

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

try
{
    var result = await solver.RecaptchaAsync(sitekey, pageUrl);
}
catch (ApiException ex)
{
    // ERROR_GOOGLEKEY or ERROR_PAGEURL arrives here.
    Console.WriteLine(ex.Message);
}
catch (CapSkipError ex)
{
    // Everything else the SDK can throw.
    Console.WriteLine(ex.Message);
}

Eine Zwei-Minuten-Checkliste

  1. Geben Sie den exakten Anfrage-Body aus, den Sie senden. Nicht die Variablen, den Body.
  2. Gleichen Sie den Parameternamen mit der Methode ab: googlekey für reCAPTCHA, sitekey für Turnstile.
  3. Prüfen Sie, dass der Wert nicht leer ist und keinen abschließenden Zeilenumbruch hat.
  4. Lesen Sie den sitekey erneut von der lebenden Seite und vergleichen Sie ihn mit dem gesendeten.
  5. Prüfen Sie, dass pageurl mit einem der folgenden Präfixe beginnt: http:// oder https://.
  6. Stellen Sie den Aufruf auf POST um, wenn die Seiten-URL eine Query-Zeichenkette hat.

Schritt eins löst das häufiger als die anderen fünf zusammen, weil die Abweichung meist zwischen dem liegt, was Sie zu senden glauben, und dem, was auf der Leitung ist.

Verwandte Codes und was sie stattdessen bedeuten

CodeBedeutet
ERROR_WRONG_USER_KEYDer API-Schlüssel fehlt oder ist leer, wird vor beiden geprüft
ERROR_WRONG_METHODThe method oder action -Wert ist keiner, den die API kennt
ERROR_BAD_PARAMETERSEin für diese Methode erforderlicher Parameter fehlt ganz
ERROR_CAPTCHA_UNSOLVABLEDas Einreichen hat geklappt, die Lösung nicht. Abfragezeit, nicht Einreichzeit
CAPCHA_NOT_READYKein Fehler. Dieselbe ID weiter abfragen

Jeder Code mit seinem genauen Wortlaut steht in der API-Dokumentation.

Häufig gestellte Fragen

Soll ich nach ERROR_GOOGLEKEY erneut versuchen?

Nein. Dieselben Werte werden jedes Mal gleich abgelehnt, eine Wiederholungsschleife verschwendet also nur Zeit und verdeckt das eigentliche Problem. Korrigieren Sie den Wert und reichen Sie einmal ein. Wiederholen ist die richtige Antwort auf einen Fehlschlag zur Abfragezeit, nicht zur Einreichzeit.

Mein sitekey stimmt und wird trotzdem abgelehnt. Was jetzt?

Suchen Sie zuerst nach unsichtbarem Schaden: ein abschließender Zeilenumbruch aus einer Kommandosubstitution, Anführungszeichen aus einer Konfigurationsdatei oder ein Wert, den eine Datenbankspalte fester Breite abgeschnitten hat. Geben Sie die Länge der Zeichenkette aus, die Sie senden. Ein normaler reCAPTCHA-sitekey hat 40 Zeichen, alles Kürzere wurde also irgendwo abgeschnitten.

Muss die pageurl öffentlich erreichbar sein?

Nein. Sie benennt die Seite, zu der das Widget gehört, eine Seite hinter einem Login funktioniert also. Was sie nicht sein darf, ist ein Platzhalter: Eine andere Domain als die, auf der das Widget läuft, ergibt ein Token, das die Seite ablehnt, selbst wenn das Einreichen klappt.

Liefern Turnstile-Lösungen jemals ERROR_GOOGLEKEY?

Sollten sie nicht, denn die Methode turnstile liest nie einen Parameter googlekey . Kommt er von einem Turnstile-Aufruf zurück, heißt das fast immer, dass method noch auf userrecaptcha aus einer kopierten Anfrage steht. Korrigieren Sie die Methode und senden Sie dann sitekey statt googlekey.

Zusammenfassung

Betrachten Sie error_googlekey und ERROR_PAGEURL als Tippfehler und nicht als Fehlschläge. Es wurde keine Aufgabe angelegt, kein Versuch gemacht, und nichts muss wiederholt werden. Gleichen Sie den Parameternamen mit der Methode ab, lesen Sie den sitekey aus dem lebenden DOM statt aus einer Konstante, und senden Sie eine Seiten-URL samt Schema. Vollständige Parametertabellen für jede Methode stehen auf der Seite reCAPTCHA-Löser .

Das zu debuggen ist günstig mit einem unbegrenzter Captcha-Löser , der lokal läuft. Abgelehnte Einreichungen verbrennen kein Guthaben und verbrauchen kein Kontingent, Sie können dieselbe Anfrage also zwanzigmal abfeuern, während Sie eingrenzen, welches Zeichen falsch ist.