reCAPTCHA überprüft, ob Token in derselben Domäne verwendet werden, für die sie generiert wurden. Wenn eine Diskrepanz zwischen der Domänenkonfiguration des CAPTCHA und dem tatsächlichen Anforderungsursprung besteht, erhalten Sie Fehler bei der Domänenüberprüfung. Diese Fehler sind still – das Token scheint gültig zu sein, aber der Server lehnt es ab. In diesem Leitfaden werden alle domänenbezogenen Fehlerszenarien und deren Behebung behandelt.
So funktioniert die Domain-Verifizierung
Site owner registers reCAPTCHA → adds allowed domains (example.com, www.example.com)
↓
reCAPTCHA widget loads on example.com → matches allowed domain ✓
↓
Token generated with embedded hostname
↓
Server validates token via siteverify API
↓
Google checks: Does token hostname match allowed domains?
├─ YES → { "success": true, "hostname": "example.com" }
└─ NO → { "success": false, error or hostname mismatch }
Wo die Domäne überprüft wird
| Kontrollpunkt | Was wird überprüft |
|---|---|
| Client-seitig | Widget wird nur auf zugelassenen Domänen geladen (optional – kann deaktiviert werden) |
| Token-Generierung | Der im Token eingebettete Hostname stimmt mit dem Seitenursprung überein |
| Servervalidierung | siteverify gibt den Hostnamen zurück – der Server sollte überprüfen, ob er übereinstimmt |
Häufige Fehler bei der Domänenüberprüfung
Fehler 1: Hostname stimmt in der Siteverify-Antwort nicht überein
{
"success": true,
"hostname": "subdomain.example.com",
"challenge_ts": "2025-01-15T10:30:00Z"
}
Das Token ist gültig, aber das Feld hostname zeigt eine andere Domäne als erwartet. Einige Serverimplementierungen lehnen dies ab:
# Server-side validation that checks hostname
def validate_token(token, secret_key, expected_hostname):
result = requests.post(
"https://www.google.com/recaptcha/api/siteverify",
data={"secret": secret_key, "response": token},
).json()
if not result.get("success"):
return False
# This check causes failures when hostnames don't match
if result.get("hostname") != expected_hostname:
return False # Domain mismatch!
return True
Ursachen:
- Token für
www.example.comgelöst, aber fürexample.comvalidiert - Token für
staging.example.comgelöst, aber fürexample.comvalidiert - Proxy oder CDN ändern den scheinbaren Hostnamen
Fix: Stellen Sie sicher, dass pageurl in Ihrer Solver-Anfrage genau mit der Domäne übereinstimmt, an die das Token übermittelt wird.
Fehler 2: Widget lässt sich nicht laden
Das reCAPTCHA-Widget zeigt einen Fehler an oder rendert nicht:
ERROR: Invalid domain for site key
Ursachen:
- Die zulässigen Domänen des Site-Schlüssels umfassen nicht die Domäne der aktuellen Seite
- Laden des Widgets vom Protokoll localhost oder file://
- Verwendung einer IP-Adresse anstelle eines Domänennamens
Fix für die Automatisierung: Dies ist ein Konfigurationsproblem des Websitebesitzers. Stellen Sie zum Lösen sicher, dass Sie den richtigen pageurl übergeben, der einer zulässigen Domäne entspricht.
Fehler 3: Token trotz korrekter Lösung abgelehnt
{
"success": false,
"error-codes": ["invalid-input-response"]
}
Das Token wurde für eine andere Domäne generiert als die, in der es validiert wird.
Häufige Automatisierungsursache: Der an den Solver gesendete pageurl stimmt nicht mit der tatsächlichen Zieldomäne überein:
# WRONG: pageurl doesn't match actual target
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": "https://example.com/login", # ← Must match actual domain
"json": 1,
})
# But submitting token to:
requests.post("https://app.example.com/login", ...) # Different subdomain!
Domain-Matching-Regeln
Genaue Übereinstimmung mit Wildcard
Die Domänenüberprüfung von reCAPTCHA ist standardmäßig kein strikter Subdomänenabgleich. Das Verhalten hängt von der Konfiguration des Websitebesitzers ab:
| Registrierte Domain | Akzeptable Herkunft |
|---|---|
example.com |
example.com, www.example.com, sub.example.com (falls Platzhalter aktiviert) |
www.example.com |
Nur www.example.com (falls streng) |
*.example.com |
Jede Subdomain von example.com |
localhost |
Nur localhost (für Entwicklung) |
Serverseitiges Hostnamenverhalten
Bei der Validierung über siteverify spiegelt hostname in der Antwort die Seite wider, auf der das Token generiert wurde. Der Server des Websitebesitzers entscheidet, ob er es akzeptiert:
# Permissive validation (accepts any subdomain)
def validate_permissive(token, secret, base_domain):
result = requests.post(
"https://www.google.com/recaptcha/api/siteverify",
data={"secret": secret, "response": token},
).json()
if not result.get("success"):
return False
hostname = result.get("hostname", "")
return hostname == base_domain or hostname.endswith(f".{base_domain}")
# Strict validation (exact match only)
def validate_strict(token, secret, expected_hostname):
result = requests.post(
"https://www.google.com/recaptcha/api/siteverify",
data={"secret": secret, "response": token},
).json()
return result.get("success") and result.get("hostname") == expected_hostname
Beheben von Domänenfehlern in der Automatisierung
Fix 1: Passen Sie die Seiten-URL genau an
Die häufigste Lösung besteht darin, sicherzustellen, dass pageurl mit dem tatsächlichen Ziel übereinstimmt:
# Correct: pageurl matches where you'll submit the token
target_url = "https://www.example.com/login"
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
"pageurl": target_url, # Must match the actual domain
"json": 1,
})
Fix 2: Behandeln Sie www vs. nicht-www
from urllib.parse import urlparse
def normalize_url(url):
"""Normalize URL for consistent domain matching."""
parsed = urlparse(url)
# Use exactly what the target site uses
# Check if the site redirects www → non-www or vice versa
return f"{parsed.scheme}://{parsed.netloc}{parsed.path}"
# Test which variant the site uses
response = requests.get("https://example.com/login", allow_redirects=True)
actual_url = response.url # May be https://www.example.com/login after redirect
Fix 3: Erkennen Sie die richtige Domain aus der Weiterleitungskette
Einige Websites leiten über mehrere Domänen weiter:
def get_final_url(url):
"""Follow redirects to find the actual CAPTCHA page domain."""
response = requests.get(url, allow_redirects=True, timeout=15)
return response.url
# Login URL might redirect:
# https://example.com/login → https://auth.example.com/login
final_url = get_final_url("https://example.com/login")
# Use final_url as pageurl for solver
Fix 4: Domain aus reCAPTCHA-Callback-URL extrahieren
from bs4 import BeautifulSoup
from urllib.parse import urlparse
def extract_recaptcha_domain(html, page_url):
"""Extract the domain reCAPTCHA uses for token binding."""
soup = BeautifulSoup(html, "html.parser")
# Check for reCAPTCHA iframe
iframe = soup.find("iframe", src=lambda s: s and "recaptcha" in s)
if iframe:
src = iframe.get("src", "")
# The iframe URL may contain the domain parameter
if "domain=" in src:
# Extract domain from iframe URL
pass
# Default: use the page URL's domain
return urlparse(page_url).netloc
Diagnosetool zur Domänenüberprüfung
import requests
from urllib.parse import urlparse
class DomainDiagnostic:
"""Diagnose domain verification issues for reCAPTCHA solving."""
def __init__(self, target_url):
self.target_url = target_url
self.issues = []
def check_redirects(self):
"""Check if the URL redirects to a different domain."""
try:
response = requests.get(
self.target_url, allow_redirects=True, timeout=15,
headers={"User-Agent": "Mozilla/5.0 Chrome/120.0.0.0"},
)
final_url = response.url
original_domain = urlparse(self.target_url).netloc
final_domain = urlparse(final_url).netloc
if original_domain != final_domain:
self.issues.append({
"type": "redirect",
"message": f"Redirects from {original_domain} to {final_domain}",
"fix": f"Use pageurl: {final_url}",
})
return final_url
except Exception as e:
self.issues.append({"type": "error", "message": str(e)})
return self.target_url
def check_www_variant(self):
"""Check if www and non-www point to the same content."""
parsed = urlparse(self.target_url)
domain = parsed.netloc
if domain.startswith("www."):
alt_domain = domain[4:]
else:
alt_domain = f"www.{domain}"
alt_url = self.target_url.replace(domain, alt_domain)
try:
alt_response = requests.get(alt_url, allow_redirects=True, timeout=10)
alt_final = urlparse(alt_response.url).netloc
if alt_final != domain and alt_final != alt_domain:
self.issues.append({
"type": "www_redirect",
"message": f"{alt_domain} redirects to {alt_final}",
})
except Exception:
pass
def report(self):
"""Generate diagnostic report."""
final_url = self.check_redirects()
self.check_www_variant()
print(f"Target URL: {self.target_url}")
print(f"Final URL: {final_url}")
print(f"Use as pageurl: {final_url}")
if self.issues:
print("\nIssues found:")
for issue in self.issues:
print(f" [{issue['type']}] {issue['message']}")
if "fix" in issue:
print(f" Fix: {issue['fix']}")
else:
print("\nNo domain issues detected.")
# Usage
diag = DomainDiagnostic("https://example.com/login")
diag.report()
Fehlerbehebungstabelle
| Symptom | Wahrscheinliche Ursache | Diagnose | Beheben |
|---|---|---|---|
| Token immer abgelehnt | Die Seiten-URL stimmt nicht mit der Zieldomäne überein | Vergleichen Sie die URL der Solver-Seite mit der tatsächlichen Übermittlungsdomäne | Aktualisieren Sie die Seiten-URL entsprechend |
| Funktioniert auf www, schlägt auf Nicht-www fehl | Nichtübereinstimmung der Domänenvariante | Überprüfen Sie das Weiterleitungsverhalten | Verwenden Sie die Variante, die die Zielseite verwendet (Weiterleitungen folgen) |
| Funktioniert manchmal, scheitert manchmal | CDN oder Load Balancer bedient verschiedene Domänen | Überprüfen Sie, ob die Domain je nach Anfrage variiert | Verwenden Sie eine konsistente URL aus der Weiterleitungskette |
| Funktioniert im Browser, schlägt im Skript fehl | Skript sendet von unterschiedlichem Ursprung | Vergleichen Sie die Browser-URL-Leiste mit der Seiten-URL des Skripts | Passen Sie die endgültige URL des Browsers an |
| Unternehmenstoken abgelehnt | Falsche Projekt- oder Domänenbindung | Stellen Sie sicher, dass der Enterprise-Site-Schlüssel mit der Domäne übereinstimmt | Überprüfen Sie die Domäneneinstellungen der Enterprise Console |
Häufig gestellte Fragen
Führt CaptchaAI die Domänenüberprüfung automatisch durch?
CaptchaAI generiert Token, die an das von Ihnen bereitgestellte pageurl gebunden sind. Sie müssen sicherstellen, dass diese URL mit der Domäne übereinstimmt, an die Sie das Token übermitteln. CaptchaAI überprüft die Domänenkonfiguration nicht – es verwendet die von Ihnen angegebene Seiten-URL.
Kann ich ein CAPTCHA für eine Domain lösen und es für eine andere verwenden?
Nein. reCAPTCHA-Tokens sind an die Domain gebunden, für die sie generiert wurden. Ein für example.com generiertes Token kann nicht für other-site.com verwendet werden. Sogar verschiedene Subdomains können fehlschlagen, wenn die Site den Hostnamen strikt validiert.
Warum funktioniert mein Token beim Testen, schlägt jedoch in der Produktion fehl?
Häufige Ursachen: (1) Beim Testen wird localhost verwendet, das andere Domänenregeln hat, (2) Die Produktion verwendet ein CDN mit einer anderen Domäne, (3) Die Produktion verfügt über eine strengere Hostnamen-Validierung, (4) Anderer URL-Pfad oder andere Umleitungskette in der Produktion.
Spielt der Pfad eine Rolle oder nur die Domäne?
Nur die Domäne (Hostname) wird von reCAPTCHA validiert. Der Pfad (/login, /signup) hat keinen Einfluss auf die Domänenüberprüfung. Sie sollten jedoch weiterhin die korrekte vollständige URL als pageurl verwenden, da sie von einigen Solver-Implementierungen möglicherweise für andere Zwecke verwendet wird.
Zusammenfassung
Die reCAPTCHA-Domänenüberprüfung verknüpft Token mit dem Hostnamen, auf dem sie generiert wurden. Der häufigste Automatisierungsfehler ist eine Nichtübereinstimmung von pageurl – der URL, an die übergeben wirdCaptchaAImuss mit der Domäne übereinstimmen, an die das Token übermittelt wird. Folgen Sie den Weiterleitungen, um die tatsächliche Domain zu finden, behandeln Sie WWW- und Nicht-WWW-Varianten und verwenden Sie das Domain-Diagnosetool, um Nichtübereinstimmungen vor der Lösung zu identifizieren.
Verwandte Leitfäden
- reCAPTCHA v2 Callback lösen
- reCAPTCHA v2 und Turnstile: Gleiche Seite
- Häufige Grid-Image-Captcha-Fehler und -Korrekturen
Diskussionen (0)
Beteiligen Sie sich an der Unterhaltung
Melden Sie sich an, um Ihre Meinung zu teilen.
AnmeldenNoch keine Kommentare.