Überblick
JSON-Methoden
Token-Aufgaben
- reCAPTCHA v2
- reCAPTCHA v2 Enterprise
- reCAPTCHA v3
- Cloudflare Turnstile
- GeeTest v3 / v4
- FunCaptcha (Arkose Labs)
- Amazon AWS WAF
- MTCaptcha
- Friendly Captcha
- Lemin Cropped Captcha
- DataDome
- KeyCaptcha
- Capy Puzzle
- Cloudflare-Challenge-Seite
- Cutcaptcha
- CyberSiARA
- atbCAPTCHA
- Tencent Captcha
- Prosopo Procaptcha
- CaptchaFox
- Altcha
- NetEase Yidun
- Yandex SmartCaptcha
- VK Captcha
- Binance Captcha
- Eigene Aufgabe (Imperva, Temu und weitere)
UNLOCK API Dokumentation
Senden Sie ein CAPTCHA als Aufgabe und holen Sie dann die Antwort ab. Die API verwendet dieselben Methodennamen, Aufgabennamen und Fehlercodes wie andere Solver-APIs, daher funktioniert bestehender Code meist, sobald Sie Host und Schlüssel ändern.
So läuft eine Anfrage ab
- 1
createTaskAufgabe erstellen
POST /createTask mit Ihrem Schlüssel und einem Aufgabenobjekt. Sie erhalten eine taskId. Der Preis wird sofort vom Guthaben abgebucht.
- 2
getTaskResultErgebnis prüfen
Warten Sie etwa 5 Sekunden und senden Sie dann alle 5 Sekunden POST /getTaskResult, bis status ready ist.
- 3
solutionAntwort verwenden
Setzen Sie das Token oder den Text aus solution in das Formular der Seite ein. Schlägt die Aufgabe fehl, geht der Betrag auf das Guthaben zurück.
Grundlagen
- Basis-URL
https://unlock-api.com- API-Schlüssel
- 32 Zeichen, auf Ihrer Kontoseite. Senden Sie ihn als clientKey (JSON) oder key (in.php, res.php).
- Format
- JSON-Methoden: POST mit JSON-Body. in.php und res.php: Formularfelder per GET oder POST; mit json=1 erhalten Sie JSON-Antworten.
- Limits
- 1.200 Anfragen pro Minute und Konto, Ergebnisabfragen eingeschlossen. Warten Sie nach dem Erstellen einer Aufgabe etwa 5 Sekunden und prüfen Sie dann alle 5 Sekunden.
- Zeitlimit
- Eine Aufgabe, die nicht innerhalb von 5 Minuten gelöst wird, schlägt mit ERROR_CAPTCHA_UNSOLVABLE fehl, und der Betrag geht auf das Guthaben zurück.
- Abrechnung
- Der Preis wird beim Erstellen der Aufgabe abgebucht. Fehlgeschlagene Aufgaben werden automatisch erstattet.
Schnellstart
Lösen Sie ein reCAPTCHA v2 mit den JSON-Methoden. Ersetzen Sie YOUR_API_KEY durch Ihren Schlüssel.
import time, requests
API = "https://unlock-api.com"
KEY = "YOUR_API_KEY"
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"
}
}).json()
if task["errorId"]:
raise SystemExit(task["errorCode"])
for _ in range(60): # 60 x 5 s = the 5 minute task limit
time.sleep(5)
r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task["taskId"]}).json()
if r["errorId"]:
raise SystemExit(f"{r['errorCode']}: {r.get('errorDescription', '')}") # failed tasks are refunded
if r["status"] == "ready":
print(r["solution"]["gRecaptchaResponse"])
break
else:
raise SystemExit("timed out")const API = "https://unlock-api.com";
const KEY = "YOUR_API_KEY";
const post = (path, body) => fetch(API + path, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body) }).then((r) => r.json());
const task = await post("/createTask", {
clientKey: KEY,
task: {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"
},
});
if (task.errorId) throw new Error(task.errorCode);
let solution = null;
for (let n = 0; n < 60 && !solution; n++) { // 60 x 5 s = the 5 minute task limit
await new Promise((r) => setTimeout(r, 5000));
const r = await post("/getTaskResult", { clientKey: KEY, taskId: task.taskId });
if (r.errorId) throw new Error(r.errorCode + ": " + r.errorDescription); // failed tasks are refunded
if (r.status === "ready") solution = r.solution;
}
if (!solution) throw new Error("timed out");
console.log(solution.gRecaptchaResponse);<?php
$api = "https://unlock-api.com";
$key = "YOUR_API_KEY";
function post($url, $body) {
$c = curl_init($url);
curl_setopt_array($c, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode($body)]);
return json_decode(curl_exec($c), true);
}
$task = post("$api/createTask", ["clientKey" => $key, "task" => json_decode('{"type":"RecaptchaV2TaskProxyless","websiteURL":"https://example.com/login","websiteKey":"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"}', true)]);
if ($task["errorId"]) exit($task["errorCode"]);
for ($n = 0; $n < 60; $n++) { // 60 x 5 s = the 5 minute task limit
sleep(5);
$r = post("$api/getTaskResult", ["clientKey" => $key, "taskId" => $task["taskId"]]);
if ($r["errorId"]) exit($r["errorCode"] . ": " . $r["errorDescription"]); // failed tasks are refunded
if ($r["status"] === "ready") break;
}
if ($r["status"] !== "ready") exit("timed out");
print_r($r["solution"]["gRecaptchaResponse"]);package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const api = "https://unlock-api.com"
const key = "YOUR_API_KEY"
func post(method string, body map[string]any) map[string]any {
b, _ := json.Marshal(body)
res, err := http.Post(api+"/"+method, "application/json", bytes.NewReader(b))
if err != nil {
panic(err)
}
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
return out
}
func main() {
task := post("createTask", map[string]any{
"clientKey": key,
"task": map[string]any{
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo",
},
})
if task["errorId"].(float64) != 0 {
panic(task["errorCode"])
}
for n := 0; n < 60; n++ { // 60 x 5 s = the 5 minute task limit
time.Sleep(5 * time.Second)
r := post("getTaskResult", map[string]any{"clientKey": key, "taskId": task["taskId"]})
if r["errorId"].(float64) != 0 {
panic(r["errorCode"]) // failed tasks are refunded
}
if r["status"] == "ready" {
fmt.Println(r["solution"])
return
}
}
panic("timed out")
}import java.net.URI;
import java.net.http.*;
import java.util.regex.*;
public class Solve {
static final String API = "https://unlock-api.com", KEY = "YOUR_API_KEY";
static final HttpClient HTTP = HttpClient.newHttpClient();
static String post(String method, String json) throws Exception {
var req = HttpRequest.newBuilder(URI.create(API + "/" + method))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json)).build();
return HTTP.send(req, HttpResponse.BodyHandlers.ofString()).body();
}
public static void main(String[] args) throws Exception {
String task = "{\"type\":\"RecaptchaV2TaskProxyless\",\"websiteURL\":\"https://example.com/login\",\"websiteKey\":\"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo\"}";
String created = post("createTask", "{\"clientKey\":\"" + KEY + "\",\"task\":" + task + "}");
Matcher id = Pattern.compile("\"taskId\":(\\d+)").matcher(created);
if (!id.find()) throw new RuntimeException(created);
for (int n = 0; n < 60; n++) { // 60 x 5 s = the 5 minute task limit
Thread.sleep(5000);
String r = post("getTaskResult", "{\"clientKey\":\"" + KEY + "\",\"taskId\":" + id.group(1) + "}");
if (r.contains("\"errorId\":1")) throw new RuntimeException(r); // failed tasks are refunded
if (r.contains("\"status\":\"ready\"")) { System.out.println(r); return; }
}
throw new RuntimeException("timed out");
}
}using System.Net.Http.Json;
using System.Text.Json;
const string Api = "https://unlock-api.com";
const string Key = "YOUR_API_KEY";
var http = new HttpClient();
async Task<JsonElement> Post(string method, object body) =>
await (await http.PostAsJsonAsync($"{Api}/{method}", body)).Content.ReadFromJsonAsync<JsonElement>();
var task = await Post("createTask", new {
clientKey = Key,
task = JsonSerializer.Deserialize<JsonElement>("""
{"type":"RecaptchaV2TaskProxyless","websiteURL":"https://example.com/login","websiteKey":"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"}
""")
});
if (task.GetProperty("errorId").GetInt32() != 0) throw new Exception(task.GetProperty("errorCode").GetString());
for (var n = 0; n < 60; n++) { // 60 x 5 s = the 5 minute task limit
await Task.Delay(5000);
var r = await Post("getTaskResult", new { clientKey = Key, taskId = task.GetProperty("taskId").GetInt64() });
if (r.GetProperty("errorId").GetInt32() != 0) throw new Exception(r.GetProperty("errorCode").GetString()); // failed tasks are refunded
if (r.GetProperty("status").GetString() == "ready") { Console.WriteLine(r.GetProperty("solution")); return; }
}
throw new Exception("timed out");curl -s https://unlock-api.com/createTask \
-H "Content-Type: application/json" \
-d '{"clientKey":"YOUR_API_KEY","task":{"type":"RecaptchaV2TaskProxyless","websiteURL":"https://example.com/login","websiteKey":"6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"}}'
# {"errorId":0,"taskId":1001}
curl -s https://unlock-api.com/getTaskResult \
-H "Content-Type: application/json" \
-d '{"clientKey":"YOUR_API_KEY","taskId":1001}'
# {"errorId":0,"status":"processing"} then {"errorId":0,"status":"ready","solution":{...},"cost":"0.001"}Methoden
createTaskErstellt eine Aufgabe und gibt ihre ID zurück. Der Preis des Aufgabentyps wird beim Annehmen der Aufgabe vom Guthaben abgebucht und erstattet, wenn die Aufgabe fehlschlägt.getTaskResultGibt den Zustand einer Aufgabe zurück. Während sie gelöst wird, ist status processing. Ist sie fertig, ist status ready und solution enthält die Antwort. Eine fehlgeschlagene Aufgabe liefert errorId 1 mit dem Grund, und der Betrag ist bereits wieder auf dem Guthaben.getBalanceGibt das Kontoguthaben in US-Dollar zurück.getTokenErstellt eine Aufgabe und wartet in derselben Anfrage bis zu 50 Sekunden auf die Antwort. Ist die Aufgabe bis dahin nicht fertig, lautet die Antwort status processing mit der taskId; prüfen Sie dann weiter mit getTaskResult. Für getToken-Aufgaben werden keine Ergebnis-Callbacks gesendet.getQueueStatsGibt die aktuelle Warteschlange zurück: wartende Aufgaben, Aufgaben in Bearbeitung und die durchschnittliche Lösungszeit der letzten Stunde. Die Zahlen stammen aus echten Aufgaben, nicht aus Schätzungen.getSpendingStatsGibt Ihre Ausgaben für einen UTC-Tag zurück, Stunde für Stunde: Anzahl der Aufgaben und ausgegebener Betrag. Fehlgeschlagene und erstattete Aufgaben werden nicht gezählt.reportCorrect, reportIncorrectMeldet eine richtige oder falsche Antwort. Diese Aufrufe werden angenommen, damit bestehende Bibliotheken weiter funktionieren; eine Meldung ändert den berechneten Betrag nicht.testEcho zur Fehlersuche. Gibt den empfangenen JSON-Body ohne clientKey zurück. Keine Schlüsselprüfung, keine Kosten.
Anleitungen
- API-Schlüssel und SicherheitWie Sie Ihren Schlüssel senden, mehrere Schlüssel verwenden und nur Ihre Server zulassen.
- Limits, Zeiten und AbrechnungAnfragelimits, wie oft Sie Ergebnisse prüfen, das Zeitlimit und wann abgerechnet wird.
- FehlercodesJeder Fehlercode: was er bedeutet, was zu tun ist und ob etwas berechnet wird.
- Proxy verwendenWann Sie über Ihren eigenen Proxy lösen und wie Sie ihn senden.
- Ergebnis-CallbacksLassen Sie das Ergebnis an Ihren Server senden, statt es abzufragen.
- Formular-API: in.php und res.phpDie klassischen Anfragen in.php und res.php, für Code, der für ältere Solver-APIs geschrieben wurde.
Aufgabentypen
Jeder Typ hat eine eigene Seite mit allen Parametern, dem solution-Objekt und Beispielen.
Token-Aufgaben
- reCAPTCHA v2
RecaptchaV2TaskProxylessuserrecaptcha - reCAPTCHA v2 Enterprise
RecaptchaV2EnterpriseTaskProxylessuserrecaptcha, enterprise=1 - reCAPTCHA v3
RecaptchaV3TaskProxylessuserrecaptcha, version=v3 - Cloudflare Turnstile
TurnstileTaskProxylessturnstile - GeeTest v3 / v4
GeeTestTaskProxylessgeetest, geetest_v4 - FunCaptcha (Arkose Labs)
FunCaptchaTaskProxylessfuncaptcha - Amazon AWS WAF
AmazonTaskProxylessamazon_waf - MTCaptcha
MtCaptchaTaskProxylessmt_captcha - Friendly Captcha
FriendlyCaptchaTaskProxylessfriendly_captcha - Lemin Cropped Captcha
LeminTaskProxylesslemin - DataDome
DataDomeSliderTaskdatadome - KeyCaptcha
KeyCaptchaTaskProxylesskeycaptcha - Capy Puzzle
CapyTaskProxylesscapy - Cloudflare-Challenge-Seite
AntiCloudflareTaskcloudflare_challenge - Cutcaptcha
CutCaptchaTaskProxylesscutcaptcha - CyberSiARA
AntiCyberSiAraTaskProxylesscybersiara - atbCAPTCHA
AtbCaptchaTaskProxylessatb_captcha - Tencent Captcha
TencentTaskProxylesstencent - Prosopo Procaptcha
ProsopoTaskProxylessprosopo - CaptchaFox
CaptchaFoxTaskProxylesscaptchafox - Altcha
AltchaTaskProxylessaltcha - NetEase Yidun
YidunTaskProxylessyidun - Yandex SmartCaptcha
YandexSmartCaptchaTaskProxylessyandex - VK Captcha
VKCaptchaTaskProxylessvkcaptcha - Binance Captcha
BinanceTaskProxylessbinance - Eigene Aufgabe (Imperva, Temu und weitere)
CustomTaskincapsula, temuimage, hunt, tspd, basilisk
Bild- und Audioaufgaben
- Bild zu Text
ImageToTextTaskpost, base64 - Textfrage
TextCaptchaTasktextcaptcha - Bildraster
GridTaskpost, recaptcha=1 - Klickkoordinaten
CoordinatesTaskpost, coordinatescaptcha=1 - Drehen
RotateTaskrotatecaptcha - Audio
AudioTaskaudio - Bounding Box
BoundingBoxTaskbounding_box - Umranden
DrawAroundTaskpost, canvas=1 - Drag and Drop
DragAndDropTask- - Komplexe Bildaufgabe
ComplexImageTask-