GeeTest CAPTCHA
Основанный на токенах метод обхода 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.rucaptcha.com/createTask
Пример запроса GeeTestTaskProxyless
{
"clientKey": "YOUR_API_KEY",
"task":
{
"type":"GeeTestTaskProxyless",
"websiteURL":"https://rucaptcha.com/demo/geetest",
"gt":"81388ea1fc187e0c335c0a8907ff2625",
"challenge":"2e2f0f65240058b683cb6ea21c303eea6n",
}
}
Пример запроса GeeTestTask
{
"clientKey": "YOUR_API_KEY",
"task":
{
"type":"GeeTestTaskProxyless",
"websiteURL":"https://rucaptcha.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.rucaptcha.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://rucaptcha.com/demo/geetest-v4",
"version": 4,
"initParameters": {
"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73"
}
}
}
Пример запроса GeeTestTask
{
"clientKey": "YOUR_API_KEY",
"task": {
"type":"GeeTestTaskProxyless",
"websiteURL":"https://rucaptcha.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.rucaptcha.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://rucaptcha.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://rucaptcha.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://rucaptcha.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://rucaptcha.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://rucaptcha.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://rucaptcha.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://rucaptcha.com/demo/geetest'
})
GeeTest V4
$result = $solver->geetest_v4([
'captchaId' => 'e392e1d7fd421dc63325744d5a2b9c73',
'challenge' => 'd1a9ddd7-e36f-4100-be9f-231f11743656',
'url' => 'https://rucaptcha.com/demo/geetest-v4',
]);
result = solver.geetest_v4(captcha_id='e392e1d7fd421dc63325744d5a2b9c73',
url='https://rucaptcha.com/demo/geetest-v4',
challenge="d1a9ddd7-e36f-4100-be9f-231f11743656")
GeeTestV4 captcha = new GeeTestV4();
captcha.SetCaptchaId("e392e1d7fd421dc63325744d5a2b9c73");
captcha.SetUrl("https://rucaptcha.com/demo/geetest-v4");
GeeTestV4 captcha = new GeeTestV4();
captcha.setCaptchaId("e392e1d7fd421dc63325744d5a2b9c73");
captcha.setUrl("https://rucaptcha.com/demo/geetest-v4");
require 'api_2captcha'
client = Api2Captcha.new("YOUR_API_KEY")
result = client.geetest_v4({
captcha_id: 'e392e1d7fd421dc63325744d5a2b9c73',
pageurl: 'https://rucaptcha.com/demo/geetest-v4"'
})