Логотип «GitHub»

GeeTest CAPTCHA

GeeTest

Основанный на токенах метод обхода GeeTest капчи.

Типы задач

  • GeeTestTaskProxyless - мы используем собственный пул прокси-серверов для решения капч
  • GeeTestTask - мы используем переданный вами прокси

Спецификация для типа задачи GeeTestTaskProxyless

Свойство Тип Обязателен Описание
type Строка Да Тип задачи:
GeeTestTaskProxyless
GeeTestTask
websiteURL Строка Да Полный URL-адрес целевой веб-страницы, на которую загружается капча. Мы не открываем страницу, это не проблема, если страница доступна только для авторизованных пользователей.
gt Строка Да Значение параметра gt, которое вы нашли на странице.
challenge Строка Да Значение параметра challenge, которое вы нашли в запросе.
geetestApiServerSubdomain Строка Нет Только для GeeTest V3. Пользовательский домен GeeTest API, например: api-na.geetest.com . Может быть определен внутри вызова initGeetest. Также вы можете проверить домен, используемый для загрузки скриптов, доменом по умолчанию является api.geetest.com.
userAgent Строка Нет User-Agent браузера, который будет использован пользователем при загрузке капчи. Важно использовать значения User-Agent только современных браузеров.
version Число Да* Для капчи GeeTest V4 должно быть установленно значение 4. По умолчанию: 3.
Версия GeeTest капчи: 3 или 4
initParameters Объект Да* Обязательно для GeeTest V4. Параметр который передается в вызове функции initGeetest4, обязательно содержит значение captcha_id. Пример использования: {"captcha_id" : "e392e1d7fd421dc63325744d5a2b9c73"}

Важно: для каждого запроса к нашему API необходимо получать новое значение challenge. Если капча уже была загружена на странице, то значение challenge является недействительным. Вам необходимо изучить запросы, которые выполняются при загрузке страницы и найти тот, в котором возвращается значение challenge. Затем, для получения нового challenge вам нужно каждый раз выполнять данный запрос и парсить его.

Спецификация для типа задачи GeeTestTask

Задача GeeTestTask расширяет GeeTestTaskProxyless, добавляя набор параметров, связанных с прокси, перечисленных ниже.

Свойство Тип Обязателен Описание
proxyType Строка Да Тип прокси:
http
socks4
socks5
proxyAddress Строка Да IP-адрес прокси-сервера или имя хоста
proxyPort Число Да Порт прокси-сервера
proxyLogin Строка Нет Логин используемый для аунтефикации на прокси-сервере
proxyPassword Строка Нет Пароль используемый для аунтефикации на прокси-сервере

Примеры запросов для GeeTest V3

Метод: createTask
Эндпоинт API: https://api.2captcha.com/createTask

Пример запроса GeeTestTaskProxyless

{
  "clientKey": "YOUR_API_KEY",
    "task":
    {
        "type":"GeeTestTaskProxyless",
        "websiteURL":"https://2captcha.com/demo/geetest",
        "gt":"81388ea1fc187e0c335c0a8907ff2625",
        "challenge":"2e2f0f65240058b683cb6ea21c303eea6n",
    }
}

Пример запроса GeeTestTask

{
  "clientKey": "YOUR_API_KEY",
    "task":
    {
        "type":"GeeTestTaskProxyless",
        "websiteURL":"https://2captcha.com/demo/geetest",
        "gt":"81388ea1fc187e0c335c0a8907ff2625",
        "challenge":"2e2f0f65240058b683cb6ea21c303eea6n",
        "proxyType":"http",
        "proxyAddress":"1.2.3.4",
        "proxyPort":"8080",
        "proxyLogin":"user23",
        "proxyPassword":"p4$w0rd"         
    }
}

Пример ответа

Метод: getTaskResult
Эндпоинт API: https://api.2captcha.com/getTaskResult

{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "challenge": "cd8939e104fe2edb6448c8b0dc72fec6la",
        "validate": "d7b8b93452951ab2e40b40616131622f",
        "seccode": "d7b8b93452951ab2e40b40616131622f|jordan"
    },
    "cost": "0.00299",
    "ip": "1.2.3.4",
    "createTime": 1694023013,
    "endTime": 1694023041,
    "solveCount": 0
}

Примеры запросов для GeeTest V4

Пример запроса GeeTestTaskProxyless

{
  "clientKey": "YOUR_API_KEY",
    "task": {
        "type":"GeeTestTaskProxyless",
        "websiteURL":"https://2captcha.com/demo/geetest-v4",
        "version": 4,
        "initParameters": {
          "captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"  
        }
    }
}

Пример запроса GeeTestTask

{
  "clientKey": "YOUR_API_KEY",
    "task": {
        "type":"GeeTestTaskProxyless",
        "websiteURL":"https://2captcha.com/demo/geetest-v4",
        "version": 4,
        "initParameters": {
          "captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"  
        },
        "proxyType":"http",
        "proxyAddress":"1.2.3.4",
        "proxyPort":"8080",
        "proxyLogin":"user23",
        "proxyPassword":"p4$w0rd"        
    }
}

Пример ответа

Метод: getTaskResult
Эндпоинт API: https://api.2captcha.com/getTaskResult

{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "captcha_id": "e392e1d7fd421dc63325744d5a2b9c73",
        "lot_number": "e6c3bed2854f41f880662c48afff5dcb",
        "pass_token": "fad5eb52fc83bf7617402fcccfb211a21e0aa1d1044",
        "gen_time": "1693924478",
        "captcha_output": "fN36ufW6cQN4SQ-JRDQC70nSq9UcQBg=="
    },
    "cost": "0.00299",
    "ip": "1.2.3.4",
    "createTime": 1692863536,
    "endTime": 1692863556,
    "solveCount": 1
}

Примеры кода

GeeTest V3

// https://github.com/2captcha/2captcha-php

require(__DIR__ . '/../src/autoloader.php');

$solver = new \TwoCaptcha\TwoCaptcha('YOUR_API_KEY');

try {
  $result = $solver->geetest([
      'gt'        => '81388ea1fc187e0c335c0a8907ff2625',
      'apiServer' => 'api.geetest.com',
      'challenge' => '12345678abc90123d45678ef90123a456b',
      'url'       => 'https://2captcha.com/demo/geetest',
  ]);
} catch (\Exception $e) {
  die($e->getMessage());
}

die('Captcha solved: ' . $result->code);
# https://github.com/2captcha/2captcha-python

import sys
import os
import requests
import json

sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from twocaptcha import TwoCaptcha

api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')

solver = TwoCaptcha(api_key)

resp = requests.get("https://2captcha.com/api/v1/captcha-demo/gee-test/init-params")
data = json.loads(resp)
challenge = data["challenge"]

try:
  result = solver.geetest(gt='f3bf6dbdcf7886856696502e1d55e00c',
                          apiServer='api.geetest.com',
                          challenge=challenge,
                          url='https://2captcha.com/demo/geetest')

except Exception as e:
  sys.exit(e)

else:
  sys.exit('solved: ' + str(result))
// https://github.com/2captcha/2captcha-csharp

using System;
using System.Linq;
using TwoCaptcha.Captcha;

namespace TwoCaptcha.Examples
{
  public class GeeTestExample
  {
      public void Main()
      {
          TwoCaptcha solver = new TwoCaptcha("YOUR_API_KEY");
          GeeTest captcha = new GeeTest();
          captcha.SetGt("81388ea1fc187e0c335c0a8907ff2625");
          captcha.SetApiServer("api.geetest.com");
          captcha.SetChallenge("12345678abc90123d45678ef90123a456b");
          captcha.SetUrl("https://2captcha.com/demo/geetest");
          try
          {
              solver.Solve(captcha).Wait();
              Console.WriteLine("Captcha solved: " + captcha.Code);
          }
          catch (AggregateException e)
          {
              Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message);
          }
      }
  }
}
// https://github.com/2captcha/2captcha-java

package examples;

import com.twocaptcha.TwoCaptcha;
import com.twocaptcha.captcha.GeeTest;

public class GeeTestExample {
  public static void main(String[] args) {
      TwoCaptcha solver = new TwoCaptcha("YOUR_API_KEY");
      GeeTest captcha = new GeeTest();
      captcha.setGt("81388ea1fc187e0c335c0a8907ff2625");
      captcha.setApiServer("api.geetest.com");
      captcha.setChallenge("12345678abc90123d45678ef90123a456b");
      captcha.setUrl("https://2captcha.com/demo/geetest");
      try {
          solver.solve(captcha);
          System.out.println("Captcha solved: " + captcha.getCode());
      } catch (Exception e) {
          System.out.println("Error occurred: " + e.getMessage());
      }
  }

}
// https://github.com/2captcha/2captcha-go

package main

import (
  "fmt"
  "log"
  "github.com/2captcha/2captcha-go"
)

func main() {
  client := api2captcha.NewClient("API_KEY")
  captcha := api2captcha.GeeTest{
      GT: "81388ea1fc187e0c335c0a8907ff2625",
      ApiServer: "api.geetest.com",
      Challenge: "12345678abc90123d45678ef90123a456b",
      Url: "https://2captcha.com/demo/geetest",
  }
  code, err := client.Solve(captcha.ToRequest())
  if err != nil {
      log.Fatal(err);
  }
  fmt.Println("code "+code)
}
require 'api_2captcha'

client =  Api2Captcha.new("YOUR_API_KEY")

result = client.geetest({
gt: '81388ea1fc187e0c335c0a8907ff2625',
api_server: 'api-na.geetest.com',
challenge: '12345678abc90123d45678ef90123a456b',
pageurl: 'https://2captcha.com/demo/geetest'
})

GeeTest V4

$result = $solver->geetest_v4([
  'captchaId' => 'e392e1d7fd421dc63325744d5a2b9c73',
  'challenge' => 'd1a9ddd7-e36f-4100-be9f-231f11743656',
  'url'       => 'https://2captcha.com/demo/geetest-v4',
]);
result = solver.geetest_v4(captcha_id='e392e1d7fd421dc63325744d5a2b9c73',
                      url='https://2captcha.com/demo/geetest-v4',  
                      challenge="d1a9ddd7-e36f-4100-be9f-231f11743656")
GeeTestV4 captcha = new GeeTestV4();
captcha.SetCaptchaId("e392e1d7fd421dc63325744d5a2b9c73");
captcha.SetUrl("https://2captcha.com/demo/geetest-v4");
GeeTestV4 captcha = new GeeTestV4();
captcha.setCaptchaId("e392e1d7fd421dc63325744d5a2b9c73");
captcha.setUrl("https://2captcha.com/demo/geetest-v4");  
require 'api_2captcha'

  client =  Api2Captcha.new("YOUR_API_KEY")

  result = client.geetest_v4({
      captcha_id: 'e392e1d7fd421dc63325744d5a2b9c73',
      pageurl: 'https://2captcha.com/demo/geetest-v4"'
  })

Полезные ссылки