GeeTestTask: resuelve captchas de geetest.com con proxy
Este tipo de tarea resuelve los captchas de GeeTest en los navegadores de nuestros trabajadores. Su aplicación envía la dirección del sitio web, la clave gt, la clave de desafío y después de la finalización de la tarea recibe una solución que consiste en 3 tokens. Para la versión 4 de GeeTest la solución consiste en 5 valores y la clave de desafío no es necesaria.








Ejemplos
Objeto de la tarea
Tutorial relacionado: Aprenda a utilizar los puntos de interrupción en Chrome para encontrar los parámetros de la API para FunCaptcha y Geetest
Propiedad | Tipo | Requerido | Propósito |
---|---|---|---|
type | Cadena | Sí | GeeTestTask |
websiteURL | Cadena | Sí | Dirección de un sitio web objetivo. Puede localizarse en cualquier parte del sitio web, incluso en un área de miembros. Nuestros trabajadores no navegan ahí, en su lugar simulan la visita. |
gt | Cadena | Sí | La clave pública del dominio, rara vez actualizada. |
challenge | Cadena | Sí | Clave de token cambiante. Asegúrate de conseguir una nueva para cada captcha, o de lo contrario te cobrarían por un error en la tarea. |
geetestApiServerSubdomain | Cadena | No | Subdominio API opcional. Se requiere para algunas implementaciones.
![]() |
geetestGetLib | Cadena | No | Se requiere para algunas implementaciones. Envía el cifrado JSON a una cadena. El valor puede ser rastreado con las herramientas de desarrollador del navegador. Coloca un punto de quiebre antes de llamar la función "initGeetest".
![]() |
version | Entero | No | Número de versión. La versión por defecto es la 3. Versiones soportadas: 3 y 4. |
initParameters | Objeto | No | Parámetros de inicialización adicionales para la versión 4 |
proxyType | Cadena | Sí | Tipo de http del proxy - usualmente proxy http/https socks4 - proxy socks4 socks5 - proxy socks5 |
proxyAddress | Cadena | Sí | Dirección IP de proxy ipv4/ipv6. No hay nombres de host o direcciones IP de redes locales. |
proxyPort | Entero | Sí | Puerto del Proxy |
proxyLogin | Cadena | No | Usuario para proxy, el cual requiere autorización (básica) |
proxyPassword | Cadena | No | Contraseña del Proxy |
userAgent | Cadena | Sí | Agente de usuario del navegador que se usa en la emulación. Es necesario que uses la firma de un navegador moderno, de lo contrario Google te pedirá que "actualices tu navegador". |
Ejemplo de solicitud (V3)
CURL
curl -i -H "Accept: application/json" \
-H "Content-Type: application/json" \
-X POST -d '{
"clientKey":"YOUR_API_KEY_HERE",
"task":
{
"type":"GeeTestTask",
"websiteURL":"http://mywebsite.com/geetest/test.php",
"gt":"874703612e5cac182812a00e273aad0d",
"challenge":"a559b82bca2c500101a1c8a4f4204742",
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere",
"userAgent":"MODERN_USER_AGENT_HERE"
},
"softId": 0
}' https://api.anti-captcha.com/createTask
PHP
<?php
//git clone https://git.anti-captcha.com/sup/anticaptcha-php.git
include("anticaptcha.php");
include("geetest.php");
$api = new GeeTest();
$api->setVerboseMode(true);
//grabbing challenge key ... ";
$data = json_decode(file_get_contents("https://www.geetest.com/demo/gt/register-enIcon-official?t=1547634498036"), true);
echo "grabbed data:\n";
print_r($data);
if (!isset($data["gt"]) && !isset($data["challange"])) {
echo "something went wrong, probably example was changed or network is inaccessible\n";
exit;
}
$challenge = $data["challenge"];
$gt = $data["gt"];
echo "setting gt=$gt, challenge=$challenge\n";
$api->setWebsiteURL("https://www.geetest.com/en/");
$api->setGTKey($gt);
$api->setChallenge($challenge);
//optional API subdomain, make sure you understand what to set here
$api->setAPISubdomain("optional.subdomain.api.geetest.com");
//read the docs about this optional parameter
$api->setGeetestLib("{\"customlibs\":\"url-to-lib.js\"}");
//proxy access parameters
$api->setProxyType("http");
$api->setProxyAddress("8.8.8.8");
$api->setProxyPort(1234);
//optional login and password
$api->setProxyLogin("login");
$api->setProxyPassword("password");
//your anti-captcha.com account key
$api->setKey("YOUR_API_KEY_HERE");
//Specify softId to earn 10% commission with your app.
//Get your softId here: https://anti-captcha.com/clients/tools/devcenter
$api->setSoftId(0);
//create task in API
if (!$api->createTask()) {
$api->debout("API v2 send failed - ".$api->getErrorMessage(), "red");
return false;
}
$taskId = $api->getTaskId();
//wait in a loop for max 300 seconds till task is solved
if (!$api->waitForResult(300)) {
echo "could not solve captcha\n";
echo $api->getErrorMessage()."\n";
} else {
echo "your geetest tokens:\n";
print_r($api->getTaskSolution());
}
Python
#pip3 install anticaptchaofficial
from anticaptchaofficial.geetestproxyon import *
solver = geetestProxyon()
solver.set_verbose(1)
solver.set_key("YOUR_API_KEY_HERE")
solver.set_website_url("https://address.com")
solver.set_gt_key("CONSTANT_GT_KEY")
solver.set_challenge_key("VARIABLE_CHALLENGE_KEY")
# optional API subdomain, make sure you understand what to set here
# solver.set_js_api_domain("custom-domain.geetest.com")
# getLib payload, see documentation for explanation of this
# solver.set_geetest_lib("{\"customlibs\":\"url-to-lib.js\"}")
solver.set_proxy_address("PROXY_ADDRESS")
solver.set_proxy_port(1234)
solver.set_proxy_login("proxylogin")
solver.set_proxy_password("proxypassword")
solver.set_user_agent("Mozilla/5.0")
# Specify softId to earn 10% commission with your app.
# Get your softId here: https://anti-captcha.com/clients/tools/devcenter
solver.set_soft_id(0)
token = solver.solve_and_return_solution()
if token != 0:
print "result tokens: "
print token
else:
print "task finished with error "+solver.error_code
NodeJS
//npm install @antiadmin/anticaptchaofficial
//https://git.anti-captcha.com/sup/anticaptcha-npm
const ac = require("@antiadmin/anticaptchaofficial");
ac.setAPIKey('YOUR_API_KEY_HERE');
//Specify softId to earn 10% commission with your app.
//Get your softId here: https://anti-captcha.com/clients/tools/devcenter
ac.setSoftId(0);
ac.solveGeeTestProxyOn('http://DOMAIN.COM',
'GT',
'CHALLENGE',
'API_SUBDOMAIN',
'GET_LIB',
'http', //http, socks4, socks5
'PROXY_ADDRESS',
'PROXY_PORT',
'PROXY_LOGIN',
'PROXY_PASSWORD',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116',
'some=cookies')
.then(result => {
console.log('result: ');
console.log(result);
})
.catch(error => console.log('test received error '+error));
Java
//git clone https://git.anti-captcha.com/sup/anticaptcha-java.git
package com.anti_captcha;
import com.anti_captcha.Api.GeeTestProxyless;
import com.anti_captcha.Helper.DebugHelper;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.concurrent.ThreadLocalRandom;
public class Main {
public static void main(String[] args) throws InterruptedException, MalformedURLException, JSONException {
DebugHelper.setVerboseMode(true);
GeeTest api = new GeeTest();
api.setClientKey("YOUR_API_KEY_HERE");
api.setWebsiteUrl(new URL("http://biletmaster.com/"));
api.setWebsiteKey("be33de396f8d04030f6eca8fbd225071");
api.setWebsiteChallenge("grabbed_one_time_challenge_32bytes");
//optional API subdomain, make sure you understand what to set here
//api.setGeetestApiServerSubdomain("optional.subdomain.api.geetest.com");
//read the docs about this optional parameter
//api.setGeetestLib("{\"customlibs\":\"url-to-lib.js\"}");
// proxy access parameters
// DO NOT USE PURCHASED/RENTED PROXIES WITH PROXY SERVICES!!!
api.setProxyType(RecaptchaV2.ProxyTypeOption.HTTP);
api.setProxyAddress("xx.xxx.xx.xx");
api.setProxyPort(8282);
api.setProxyLogin("login");
api.setProxyPassword("password");
//Specify softId to earn 10% commission with your app.
//Get your softId here: https://anti-captcha.com/clients/tools/devcenter
api.setSoftId(0);
if (!api.createTask()) {
DebugHelper.out(
"API v2 send failed. " + api.getErrorMessage(),
DebugHelper.Type.ERROR
);
} else if (!api.waitForResult()) {
DebugHelper.out("Could not solve the captcha.", DebugHelper.Type.ERROR);
} else {
DebugHelper.out("Result CHALLENGE: " + api.getTaskSolution().getChallenge(), DebugHelper.Type.SUCCESS);
DebugHelper.out("Result SECCODE: " + api.getTaskSolution().getSeccode(), DebugHelper.Type.SUCCESS);
DebugHelper.out("Result VALIDATE: " + api.getTaskSolution().getValidate(), DebugHelper.Type.SUCCESS);
}
}
}
Ejemplo de solicitud (V4)
CURL
curl -i -H "Accept: application/json" \
-H "Content-Type: application/json" \
-X POST -d '{
"clientKey":"YOUR_API_KEY_HERE",
"task":
{
"type":"GeeTestTask",
"websiteURL":"http://mywebsite.com/geetest/test.php",
"gt":"874703612e5cac182812a00e273aad0d",
"version":4,
"initParameters": {
"riskType": "slide"
}
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere",
"userAgent":"MODERN_USER_AGENT_HERE"
},
"softId": 0
}' https://api.anti-captcha.com/createTask
PHP
<?php
//git clone https://git.anti-captcha.com/sup/anticaptcha-php.git
include("anticaptcha.php");
include("geetest.php");
$api = new GeeTest();
$api->setVerboseMode(true);
$api->setWebsiteURL("https://www.geetest.com/en/adaptive-captcha-demo");
$api->setGTKey("fcd636b4514bf7ac4143922550b3008b");
$api->setVersion(4);
$api->setInitParameters([
"riskType": "slide"
]);
//optional API subdomain, make sure you understand what to set here
$api->setAPISubdomain("optional.subdomain.api.geetest.com");
//proxy access parameters
$api->setProxyType("http");
$api->setProxyAddress("8.8.8.8");
$api->setProxyPort(1234);
//optional login and password
$api->setProxyLogin("login");
$api->setProxyPassword("password");
//your anti-captcha.com account key
$api->setKey("YOUR_API_KEY_HERE");
//Specify softId to earn 10% commission with your app.
//Get your softId here: https://anti-captcha.com/clients/tools/devcenter
$api->setSoftId(0);
//create task in API
if (!$api->createTask()) {
$api->debout("API v2 send failed - ".$api->getErrorMessage(), "red");
return false;
}
$taskId = $api->getTaskId();
//wait in a loop for max 300 seconds till task is solved
if (!$api->waitForResult(300)) {
echo "could not solve captcha\n";
echo $api->getErrorMessage()."\n";
} else {
echo "your geetest tokens:\n";
print_r($api->getTaskSolution());
}
Python
#pip3 install anticaptchaofficial
from anticaptchaofficial.geetestproxyon import *
solver = geetestProxyon()
solver.set_verbose(1)
solver.set_key("YOUR_API_KEY_HERE")
solver.set_website_url("https://address.com")
solver.set_gt_key("captchaId value")
solver.set_version(4)
# optional API subdomain, make sure you understand what to set here
# solver.set_js_api_domain("custom-domain.geetest.com")
# optional initialization parameters
# solver.set_init_parameters({"riskType": "slide"})
solver.set_proxy_address("PROXY_ADDRESS")
solver.set_proxy_port(1234)
solver.set_proxy_login("proxylogin")
solver.set_proxy_password("proxypassword")
solver.set_user_agent("Mozilla/5.0")
# Specify softId to earn 10% commission with your app.
# Get your softId here: https://anti-captcha.com/clients/tools/devcenter
solver.set_soft_id(0)
token = solver.solve_and_return_solution()
if token != 0:
print "result tokens: "
print token
else:
print "task finished with error "+solver.error_code
NodeJS
//npm install @antiadmin/anticaptchaofficial
//https://git.anti-captcha.com/sup/anticaptcha-npm
const ac = require("@antiadmin/anticaptchaofficial");
ac.setAPIKey('YOUR_API_KEY_HERE');
//Specify softId to earn 10% commission with your app.
//Get your softId here: https://anti-captcha.com/clients/tools/devcenter
ac.setSoftId(0);
ac.solveGeeTestV4ProxyOn('http://DOMAIN.COM',
'captchaId',
'API_SUBDOMAIN',
{
"riskType": "slide"
},
'http', //http, socks4, socks5
'PROXY_ADDRESS',
'PROXY_PORT',
'PROXY_LOGIN',
'PROXY_PASSWORD',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116',
'some=cookies')
.then(result => {
console.log('result: ');
console.log(result);
})
.catch(error => console.log('test received error '+error));
Java
//git clone https://git.anti-captcha.com/sup/anticaptcha-java.git
package com.anti_captcha;
import com.anti_captcha.Api.GeeTestProxyless;
import com.anti_captcha.Helper.DebugHelper;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.concurrent.ThreadLocalRandom;
public class Main {
public static void main(String[] args) throws InterruptedException, MalformedURLException, JSONException {
DebugHelper.setVerboseMode(true);
GeeTest api = new GeeTestV4();
api.setClientKey("YOUR_API_KEY_HERE");
api.setWebsiteUrl(new URL("https://auth.geetest.com/"));
api.setWebsiteKey("b6e21f90a91a3c2d4a31fe84e10d0442");
//optional API subdomain, make sure you understand what to set here
//api.setGeetestApiServerSubdomain("optional.subdomain.api.geetest.com");
// optional initialization parameters
JSONObject additionalInitParameters = new JSONObject();
try {
additionalInitParameters.put("riskType", "ai");
} catch (Exception e) {
DebugHelper.out("JSON error: "+e.getMessage(), DebugHelper.Type.ERROR);
return;
}
api.setInitParameters(additionalInitParameters);
// proxy access parameters
// DO NOT USE PURCHASED/RENTED PROXIES WITH PROXY SERVICES!!!
api.setProxyType(RecaptchaV2.ProxyTypeOption.HTTP);
api.setProxyAddress("xx.xxx.xx.xx");
api.setProxyPort(8282);
api.setProxyLogin("login");
api.setProxyPassword("password");
//Specify softId to earn 10% commission with your app.
//Get your softId here: https://anti-captcha.com/clients/tools/devcenter
api.setSoftId(0);
if (!api.createTask()) {
DebugHelper.out(
"API v2 send failed. " + api.getErrorMessage(),
DebugHelper.Type.ERROR
);
} else if (!api.waitForResult()) {
DebugHelper.out("Could not solve the captcha.", DebugHelper.Type.ERROR);
} else {
DebugHelper.out("Result captcha_id: " + api.getTaskSolution().getCaptchaId(), DebugHelper.Type.SUCCESS);
DebugHelper.out("Result lot_number: " + api.getTaskSolution().getLotNumber(), DebugHelper.Type.SUCCESS);
DebugHelper.out("Result pass_token: " + api.getTaskSolution().getPassToken(), DebugHelper.Type.SUCCESS);
DebugHelper.out("Result gen_time: " + api.getTaskSolution().getGenTime(), DebugHelper.Type.SUCCESS);
DebugHelper.out("Result captcha_output: " + api.getTaskSolution().getCaptchaOutput(), DebugHelper.Type.SUCCESS);
}
}
}
Ejemplo de respuesta
JSON sin errores
{
"errorId": 0,
"taskId": 7654321
}
JSON con un error
{
"errorId": 1,
"errorCode": "ERROR_KEY_DOES_NOT_EXIST",
"errorDescription": "Account authorization key not found in the system"
}
Obtener la solución
Usa el método getTaskResult para pedir la solución. Dale algo de tiempo al trabajador, como 5 segundos, antes de hacer la primera solicitud. Si el trabajador sigue ocupado, vuelve a intentar en 3 segundos.
Objeto de solución de la tarea (V3)
Propiedad | Tipo | Propósito |
---|---|---|
challenge | Cadena | Cadena hash requerida para interactuar con el envío de un formulario a un sitio web objetivo. |
validate | Cadena | Cadena hash también requerida. |
seccode | Cadena | Otra cadena hash requerida, no tenemos idea de por qué hay 3. |
Objeto de solución de la tarea (V4)
Propiedad | Tipo |
---|---|
captcha_id | Cadena |
lot_number | Cadena |
pass_token | Cadena |
gen_time | Entero |
captcha_output | Cadena |
Ejemplo de respuesta (v3)
JSON sin errores
{
"errorId":0,
"status":"ready",
"solution":
{
"challenge":"3c1c5153aa48011e92883aed820069f3hj",
"validate":"47ad5a0a6eb98a95b2bcd9e9eecc8272",
"seccode":"83fa4f2d23005fc91c3a015a1613f803|jordan"
},
"cost":"0.001500",
"ip":"46.98.54.221",
"createTime":1472205564,
"endTime":1472205570,
"solveCount":"0"
}
Ejemplo de uso de token

Ejemplo de respuesta (v4)
JSON sin errores
{
"errorId":0,
"status":"ready",
"solution":
{
"captcha_id": "fcd636b4514bf7ac4143922550b3008b",
"lot_number": "354ab6dd4e594fdc903074c4d8d37b24",
"pass_token": "b645946a654e60218c7922b74b3b5ee8e8717e8fd3cd5182a5c98d660bbd1ed5",
"gen_time": "1649921519",
"captcha_output": "cFPIALDXSop8Ri2mPABbRWzNBs86N8D4vNUTuVa7wN7E...[cut]...ciM50ePCCzLBZ1bmaV9Yt7IkkFI9Emx4eaP8rRoA=="
},
"cost":"0.001500",
"ip":"46.98.54.221",
"createTime":1472205564,
"endTime":1472205570,
"solveCount":"0"
}