UNLOCK API
GeeTest v3 / v4

GeeTest v3 / v4

Cómo enviar una tarea de GeeTest v3 / v4 a UNLOCK API con createTask o in.php: nombres del tipo de tarea, todos los parámetros, el objeto solution, los campos de proxy y ejemplos de código en 7 lenguajes.
Precio
$0.70 $0.0007 por tarea
Envías
URL de la página con gt y challenge (v3) o captcha_id (v4)
Recibes
Los valores que envía el formulario de GeeTest

Resumen y precio

Nombres del tipo de tarea

Usa el primer nombre para resolver sin proxy. Usa el segundo nombre y agrega los campos de proxy para resolver a través de tu propio proxy. El precio es el mismo.
GeeTestTaskProxylessSin proxy
GeeTestTaskCon tu proxy

Objeto de tarea

type
StringObligatorio
Nombre del tipo de tarea. Se reconoce sin importar mayúsculas o minúsculas. GeeTestTaskProxyless | GeeTestTask
websiteURL
StringObligatorio
Dirección completa de la página donde aparece el CAPTCHA, que empiece por http:// o https://.
gt
StringOpcional
GeeTest v3: el valor gt de la página.
challenge
StringOpcional
GeeTest v3: un valor challenge nuevo. Obtén uno nuevo para cada tarea.
geetestApiServerSubdomain
StringOpcional
Servidor de API de GeeTest, si la página usa uno propio.
version
IntegerOpcional
4 para GeeTest v4. Por defecto 3.
initParameters
ObjectOpcional
GeeTest v4: un objeto con captcha_id.
userAgent
StringOpcional
User-Agent del navegador que se usará al resolver. Envía el mismo cuando envíes la respuesta.

Los campos que no aparecen aquí se pasan al resolvedor tal como se envían.

Campos de proxy

Solo para el nombre de tipo con proxy. Envía los campos por separado o una sola cadena proxy.
proxyType
StringObligatorio
http, https, socks4 o socks5.
proxyAddress
StringObligatorio
Dirección IP o nombre de host del proxy.
proxyPort
IntegerObligatorio
Puerto del proxy.
proxyLogin
StringOpcional
Usuario del proxy, si el proxy lo requiere.
proxyPassword
StringOpcional
Contraseña del proxy, si el proxy la requiere.
proxy
String
Todos los campos de proxy en una sola cadena, por ejemplo http://user:pass@1.2.3.4:8080.

Uso de proxy

Solicitud

POST /createTask
{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "GeeTestTaskProxyless",
    "websiteURL": "https://example.com/login",
    "gt": "81388ea1fc187e0c335c0a8907ff2625",
    "challenge": "2e2f0f65240058b683cb6ea21c303eea"
  }
}

Objeto solution

Se devuelve en solution cuando status es ready.
challenge
String
challenge de GeeTest v3 que hay que enviar.
validate
String
Valor validate de GeeTest v3.
seccode
String
Valor seccode de GeeTest v3.
captcha_id
String
captcha_id de GeeTest v4.
lot_number
String
lot_number de GeeTest v4.
pass_token
String
pass_token de GeeTest v4.
gen_time
String
gen_time de GeeTest v4.
captcha_output
String
captcha_output de GeeTest v4.
POST /getTaskResult
{
  "errorId": 0,
  "taskId": 1001,
  "status": "ready",
  "solution": {
    "challenge": "1ad03db8aff920037fb8117827eab171gu",
    "validate": "0e0ab9f2fdbf7b8e2c3c1a2d4f2c9b07",
    "seccode": "0e0ab9f2fdbf7b8e2c3c1a2d4f2c9b07|jordan",
    "captcha_id": "(v4) e392e1d7fd421dc63325744d5a2b9c73",
    "lot_number": "(v4) e6c3bed2854f41f880662c48afff5dcb",
    "pass_token": "(v4) fad5eb52fc83bf7617f4...",
    "gen_time": "(v4) 1693924478",
    "captcha_output": "(v4) fN36ufW6cQN2SQ-I..."
  },
  "cost": "0.0007",
  "createTime": 1791640000,
  "endTime": 1791640014,
  "solveCount": 1
}

Ejemplos de código

import time, requests

API = "https://unlock-api.com"
KEY = "YOUR_API_KEY"

task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
      "type": "GeeTestTaskProxyless",
      "websiteURL": "https://example.com/login",
      "gt": "81388ea1fc187e0c335c0a8907ff2625",
      "challenge": "2e2f0f65240058b683cb6ea21c303eea"
    }
}).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"])
        break
else:
    raise SystemExit("timed out")

Método de formulario in.php

La misma tarea con la solicitud de formulario clásica. res.php devuelve la respuesta como texto.
in.php, res.php
curl -s "https://unlock-api.com/in.php" -d "key=YOUR_API_KEY&method=geetest&gt=GT&challenge=CHALLENGE&pageurl=https://example.com/login&json=1"
# {"status":1,"request":"1001"}

curl -s "https://unlock-api.com/res.php?key=YOUR_API_KEY&action=get&id=1001&json=1"
# {"status":0,"request":"CAPCHA_NOT_READY"}  then  {"status":1,"request":"ANSWER"}

API de formulario: in.php y res.php