GeeTestTaskProxyless: вирішити captcha від geetest.com без проксі
Цей тип завдань вирішує капчі GeeTest у наших робочих браузерах. Ваш додаток надсилає адресу веб-сайту, ключ gt, ключ виклику, а після виконання завдання отримує рішення, що складається з 3 маркерів. Для версії GeeTest версії 4 вихід складається з 5 значень, і ключ виклику не потрібен.
Все схоже на GeeTestTask, за винятком того, що нам не потрібен проксі-сервер, і ми вирішуємо це з власних IP-адрес.








Приклади
Об'єкт завдання
Пов’язаний посібник: Дізнайтеся, як використовувати точки зупину в Chrome для пошуку параметрів API для FunCaptcha та Geetest
Властивість | Тип | Обов’язково | Призначення |
---|---|---|---|
type | Рядок | Так | GeeTestTaskProxyless |
websiteURL | Рядок | Так | Адреса цільової веб-сторінки. Може бути розміщена де завгодно на веб-сайті, навіть у клієнтській області. Наші працівники не переходять туди, а замість цього імітують відвідування. |
gt | Рядок | Так | Відкритий ключ домену, рідко оновлюється. |
challenge | Рядок | Ні | Зміна ключа токена. Не забудьте взяти свіжий для кожної капчі, інакше з вас буде стягнено плату за помилкове завдання. Необхідно для версії 3. Не потрібно для версії 4 |
geetestApiServerSubdomain | Рядок | Ні | Необов’язковий субдомен API. Може знадобитися для деяких реалізацій.
![]() |
geetestGetLib | Рядок | Ні | Потрібно для деяких реалізацій. Надішліть JSON, закодований у рядок. Значення можна простежити за допомогою інструментів розробника браузера. Поставте точку зупинки перед викликом функції "initGeetest".
![]() |
version | Цілочисельний | Ні | Номер версії. Версія за замовчуванням – 3. Підтримувані версії: 3 і 4. |
initParameters | Об'єкт | Ні | Додаткові параметри ініціалізації для версії 4 |
Приклад запиту (V3)
CURL
curl -i -H "Accept: application/json" \
-H "Content-Type: application/json" \
-X POST -d '{
"clientKey":"YOUR_API_KEY_HERE",
"task":
{
"type":"GeeTestTaskProxyless",
"websiteURL":"http://mywebsite.com/geetest/test.php",
"gt":"874703612e5cac182812a00e273aad0d",
"challenge":"a559b82bca2c500101a1c8a4f4204742"
},
"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("geetestproxyless.php");
$api = new GeeTestProxyless();
$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\"}");
//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.geetestproxyless import *
solver = geetestProxyless()
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\"}")
# 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.solveGeeTestProxyless('http://DOMAIN.COM',
'GT',
'CHALLENGE',
'API_SUBDOMAIN',
'GET_LIB')
.then(result => {
console.log('result: ');
console.log(result);
})
.catch(error => console.log('test received error '+error));
C#
//git clone https://git.anti-captcha.com/sup/anticaptcha-csharp.git
using System;
using Anticaptcha_example.Api;
using Anticaptcha_example.Helper;
using Newtonsoft.Json.Linq;
namespace Anticaptcha_example
{
internal class Program
{
private static void Main() {
DebugHelper.VerboseMode = true;
var api = new GeeTestProxyless()
{
ClientKey = "YOUR_API_KEY_HERE",
WebsiteUrl = new Uri("http://www.supremenewyork.com"),
WebsiteKey = "b6e21f90a91a3c2d4a31fe84e10d0442",
WebsiteChallenge = "169acd4a58f2c99770322dfa5270c221"
// Specify softId to earn 10% commission with your app.
// Get your softId here:
// https://anti-captcha.com/clients/tools/devcenter
SoftId = 0
};
if (!api.CreateTask())
DebugHelper.Out("API v2 send failed. " + api.ErrorMessage, DebugHelper.Type.Error);
else if (!api.WaitForResult())
DebugHelper.Out("Could not solve the captcha.", DebugHelper.Type.Error);
else
{
DebugHelper.Out("Result CHALLENGE: " + api.GetTaskSolution().Challenge, DebugHelper.Type.Success);
DebugHelper.Out("Result SECCODE: " + api.GetTaskSolution().Seccode, DebugHelper.Type.Success);
DebugHelper.Out("Result VALIDATE: " + api.GetTaskSolution().Validate, DebugHelper.Type.Success);
}
}
}
}
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);
GeeTestProxyless api = new GeeTestProxyless();
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\"}");
//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);
}
}
}
GeeTest V4
CURL
curl -i -H "Accept: application/json" \
-H "Content-Type: application/json" \
-X POST -d '{
"clientKey":"YOUR_API_KEY_HERE",
"task":
{
"type":"GeeTestTaskProxyless",
"websiteURL":"http://mywebsite.com/geetest/test.php",
"gt":"874703612e5cac182812a00e273aad0d",
"version":4,
"initParameters": {
"riskType": "slide"
}
},
"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("geetestproxyless.php");
$api = new GeeTestProxyless();
$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("gcaptcha4.geetest.com");
//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.geetestproxyless import *
solver = geetestProxyless()
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"})
# 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.solveGeeTestV4Proxyless('http://DOMAIN.COM',
'captchaId',
'API_SUBDOMAIN',
{
"riskType": "slide"
})
.then(result => {
console.log('result: ');
console.log(result);
})
.catch(error => console.log('test received error '+error));
C#
//git clone https://git.anti-captcha.com/sup/anticaptcha-csharp.git
using System;
using Anticaptcha_example.Api;
using Anticaptcha_example.Helper;
using Newtonsoft.Json.Linq;
namespace Anticaptcha_example
{
internal class Program
{
private static void Main() {
DebugHelper.VerboseMode = true;
var api = new GeeTestV4Proxyless()
{
ClientKey = ClientKey,
WebsiteUrl = new Uri("http://www.supremenewyork.com"),
WebsiteKey = "b6e21f90a91a3c2d4a31fe84e10d0442",
// Specify softId to earn 10% commission with your app.
// Get your softId here:
// https://anti-captcha.com/clients/tools/devcenter
SoftId = 0
};
api.initParameters.Add("riskType", "slide");
if (!api.CreateTask())
DebugHelper.Out("API v2 send failed. " + api.ErrorMessage, DebugHelper.Type.Error);
else if (!api.WaitForResult())
DebugHelper.Out("Could not solve the captcha.", DebugHelper.Type.Error);
else
{
DebugHelper.Out("Result CaptchaId: " + api.GetTaskSolution().CaptchaId, DebugHelper.Type.Success);
DebugHelper.Out("Result LotNumber: " + api.GetTaskSolution().LotNumber, DebugHelper.Type.Success);
DebugHelper.Out("Result PassToken: " + api.GetTaskSolution().PassToken, DebugHelper.Type.Success);
DebugHelper.Out("Result GenTime: " + api.GetTaskSolution().GenTime, DebugHelper.Type.Success);
DebugHelper.Out("Result CaptchaOutput: " + api.GetTaskSolution().CaptchaOutput, DebugHelper.Type.Success);
}
}
}
}
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);
GeeTestProxyless api = new GeeTestV4Proxyless();
api.setClientKey("YOUR_API_KEY_HERE");
api.setWebsiteUrl(new URL("http://biletmaster.com/"));
api.setWebsiteKey("be33de396f8d04030f6eca8fbd225071");
// optional initial 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);
//optional API subdomain, make sure you understand what to set here
//api.setGeetestApiServerSubdomain("optional.subdomain.api.geetest.com");
//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);
}
}
}
Приклад відповіді
JSON без помилок
{
"errorId": 0,
"taskId": 7654321
}
JSON з помилкою
{
"errorId": 1,
"errorCode": "ERROR_KEY_DOES_NOT_EXIST",
"errorDescription": "Account authorization key not found in the system"
}
Отримати рішення
Запитуйте рішення за допомогою методу getTaskResult. Дайте працівникові трохи часу, наприклад, 5 секунд, перед тим, як зробити перший запит. Якщо працівник все ще зайнятий, повторіть спробу через 3 секунди.
Об’єкт рішення завдання (V3)
Властивість | Тип | Призначення |
---|---|---|
challenge | Рядок | Рядок хешу, який необхідний для взаємодії з формою подання на цільовому веб-сайті. |
validate | Рядок | Рядок хешу, який теж необхідний. |
seccode | Рядок | Ще один обов’язковий хеш-рядок, ми не уявляємо, чому їх 3. |
Об’єкт рішення завдання (V4)
Властивість | Тип |
---|---|
captcha_id | Рядок |
lot_number | Рядок |
pass_token | Рядок |
gen_time | Цілочисельний |
captcha_output | Рядок |
Приклад відповіді (v3)
JSON без помилок
{
"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"
}
Приклад використання токена

Приклад відповіді (v4)
JSON без помилок
{
"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"
}