AZCaptcha und CaptchaAI verwenden beide ein 2Captcha-kompatibles API-Format, was die Migration unkompliziert macht. Meistens ändern Sie die Basis-URL und den API-Schlüssel – das Anfrageformat bleibt gleich.
Endpunktzuordnung
| Aktion | AZCaptcha | CaptchaAI |
|---|---|---|
| Aufgabe abschicken | https://azcaptcha.com/in.php |
https://ocr.captchaai.com/in.php |
| Ergebnis erhalten | https://azcaptcha.com/res.php |
https://ocr.captchaai.com/res.php |
| Überprüfen Sie den Kontostand | res.php?action=getbalance |
res.php?action=getbalance |
| Bericht falsch | res.php?action=reportbad |
res.php?action=reportbad |
Parameterkompatibilität
Die meisten Parameter sind identisch. Hauptunterschiede:
| Parameter | AZCaptcha | CaptchaAI | Notizen |
|---|---|---|---|
key |
API-Schlüssel | API-Schlüssel | Anderer Schlüssel – holen Sie sich Ihren bei captchaai.com |
method |
userrecaptcha |
userrecaptcha |
Das Gleiche |
googlekey |
Site-Schlüssel | Site-Schlüssel | Das Gleiche |
pageurl |
Seiten-URL | Seiten-URL | Das Gleiche |
json |
1 |
1 |
Das Gleiche |
proxy |
user:pass@host:port |
user:pass@host:port |
Gleiches Format |
proxytype |
HTTP/BEISPIEL_TOKEN |
HTTP/BEISPIEL_TOKEN |
Das Gleiche |
Migrationsschritte
Schritt 1: Holen Sie sich den API-Schlüssel CaptchaAI
- Melden Sie sich an untercaptchaai.com
- Fügen Sie Ihrem Konto Geld hinzu
- Kopieren Sie Ihren API-Schlüssel aus dem Dashboard
Schritt 2: Aktualisieren Sie Ihren Code
Python – Vorher (AZCaptcha)
import requests
API_KEY = "your_azcaptcha_key"
def solve_recaptcha(sitekey, pageurl):
# Submit
resp = requests.post("https://azcaptcha.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1
})
data = resp.json()
if data["status"] != 1:
return {"error": data["request"]}
captcha_id = data["request"]
# Poll
import time
for _ in range(60):
time.sleep(5)
result = requests.get("https://azcaptcha.com/res.php", params={
"key": API_KEY, "action": "get", "id": captcha_id, "json": 1
}).json()
if result["status"] == 1:
return {"solution": result["request"]}
if result["request"] != "CAPCHA_NOT_READY":
return {"error": result["request"]}
return {"error": "TIMEOUT"}
Python – Nachher (CaptchaAI)
import os
import time
import requests
API_KEY = os.environ["CAPTCHAAI_API_KEY"] # Changed: use env var
def solve_recaptcha(sitekey, pageurl):
# Submit — only URL changed
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1
})
data = resp.json()
if data.get("status") != 1:
return {"error": data.get("request")}
captcha_id = data["request"]
# Poll — only URL changed
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": captcha_id, "json": 1
}).json()
if result.get("status") == 1:
return {"solution": result["request"]}
if result.get("request") != "CAPCHA_NOT_READY":
return {"error": result.get("request")}
return {"error": "TIMEOUT"}
JavaScript – Vorher (AZCaptcha)
const axios = require("axios");
const API_KEY = "your_azcaptcha_key";
async function solveRecaptcha(sitekey, pageurl) {
const submit = await axios.post("https://azcaptcha.com/in.php", null, {
params: { key: API_KEY, method: "userrecaptcha", googlekey: sitekey, pageurl, json: 1 },
});
if (submit.data.status !== 1) return { error: submit.data.request };
const captchaId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const poll = await axios.get("https://azcaptcha.com/res.php", {
params: { key: API_KEY, action: "get", id: captchaId, json: 1 },
});
if (poll.data.status === 1) return { solution: poll.data.request };
if (poll.data.request !== "CAPCHA_NOT_READY") return { error: poll.data.request };
}
return { error: "TIMEOUT" };
}
JavaScript – Nachher (CaptchaAI)
const axios = require("axios");
const API_KEY = process.env.CAPTCHAAI_API_KEY; // Changed: env var
async function solveRecaptcha(sitekey, pageurl) {
// Only URLs changed
const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
params: { key: API_KEY, method: "userrecaptcha", googlekey: sitekey, pageurl, json: 1 },
});
if (submit.data.status !== 1) return { error: submit.data.request };
const captchaId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const poll = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: API_KEY, action: "get", id: captchaId, json: 1 },
});
if (poll.data.status === 1) return { solution: poll.data.request };
if (poll.data.request !== "CAPCHA_NOT_READY") return { error: poll.data.request };
}
return { error: "TIMEOUT" };
}
Schritt 3: Abstraktion des Anbieters
Erstellen Sie für eine sicherere Migration einen anbieterunabhängigen Wrapper:
import os
import time
import requests
class CaptchaProvider:
def __init__(self, base_url, api_key):
self.submit_url = f"{base_url}/in.php"
self.result_url = f"{base_url}/res.php"
self.api_key = api_key
self.session = requests.Session()
def solve(self, sitekey, pageurl, method="userrecaptcha"):
resp = self.session.post(self.submit_url, data={
"key": self.api_key,
"method": method,
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1
})
data = resp.json()
if data.get("status") != 1:
return {"error": data.get("request")}
captcha_id = data["request"]
for _ in range(60):
time.sleep(5)
result = self.session.get(self.result_url, params={
"key": self.api_key, "action": "get",
"id": captcha_id, "json": 1
}).json()
if result.get("status") == 1:
return {"solution": result["request"]}
if result.get("request") != "CAPCHA_NOT_READY":
return {"error": result.get("request")}
return {"error": "TIMEOUT"}
# Switch by changing one line:
# provider = CaptchaProvider("https://azcaptcha.com", "old_key")
provider = CaptchaProvider(
"https://ocr.captchaai.com",
os.environ["CAPTCHAAI_API_KEY"]
)
Schritt 4: Paralleler Test
Führen Sie beide Anbieter gleichzeitig aus, um Folgendes zu vergleichen:
def parallel_test(sitekey, pageurl, runs=10):
azcaptcha = CaptchaProvider("https://azcaptcha.com", "old_key")
captchaai = CaptchaProvider(
"https://ocr.captchaai.com",
os.environ["CAPTCHAAI_API_KEY"]
)
results = {"azcaptcha": [], "captchaai": []}
for i in range(runs):
start = time.time()
az_result = azcaptcha.solve(sitekey, pageurl)
results["azcaptcha"].append({
"success": "solution" in az_result,
"time": time.time() - start
})
start = time.time()
cai_result = captchaai.solve(sitekey, pageurl)
results["captchaai"].append({
"success": "solution" in cai_result,
"time": time.time() - start
})
for provider, data in results.items():
successes = sum(1 for r in data if r["success"])
avg_time = sum(r["time"] for r in data) / len(data)
print(f"{provider}: {successes}/{runs} success, {avg_time:.1f}s avg")
Checkliste für die Migration
| Schritt | Status |
|---|---|
| Erstellen Sie ein CaptchaAI-Konto und finanzieren Sie es | ☐ |
| Ersetzen Sie die Basis-URL in allen Dateien | ☐ |
| API-Schlüssel aktualisieren (env var verwenden) | ☐ |
| Führen Sie einen parallelen Test durch (10+ Lösungen) | ☐ |
| Vergleichen Sie Erfolgsquoten | ☐ |
| Vergleichen Sie die Lösungszeiten | ☐ |
| Aktualisieren Sie „monitoring/alerting“ für neue Endpunkte | ☐ |
| Wechseln Sie den Produktionsverkehr | ☐ |
| 24 Stunden lang überwachen | ☐ |
| Deaktivieren Sie den AZCaptcha-Schlüssel | ☐ |
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Ergebnis passt nicht zum eigenen Fall | Solver-Typ oder Eingabeparameter wurden falsch auf den Zieltyp gemappt | Vergleiche Zielseite, Solver-Methode und Pflichtparameter noch einmal systematisch |
| Beispiel läuft, aber Produktion scheitert | Session, Header oder Proxy-Kontext weichen vom Test ab | Übertrage erfolgreiche Testbedingungen möglichst unverändert in den Live-Workflow |
| Fehler bleiben unklar | Logs enthalten zu wenig Kontext für eine belastbare Diagnose | Protokolliere Solver-Typ, Latenz, Fehlercode und Downstream-Reaktion gemeinsam |
Verwandte Leitfäden
- Migration von 2Captcha zu CaptchaAI
- Migration von Anti-Captcha zu CaptchaAI
- API-Antwortformate und Fehlercodes