Головна Документація Уроки Увійти
Підтримувані типи завдань
Методи API
Статті
Уроки
GitHub
Меню документації

HCaptchaTaskProxyless: вирішити HCaptcha без проксі

Розробники hCaptcha називають свою captcha "оперативною заміною для Recaptcha". Ми намагалися створити те саме в нашому API, тому властивості завдань абсолютно такі ж, як і в RecaptchaV2TaskProxyless, за винятком властивості "тип".

Важливе зауваження щодо значення User-Agent. Раніше для завдань можна було вказувати свій власний User-Agent, але це змінилося. Замість нього ми надаємо робочий юзер-агент, який потрібно використовувати для обходу платної версії Hcaptcha. Це було змінено тому, що на сьогоднішній день практично неможливо емулювати чужого користувача-агента на іншій платформі, наприклад, користувача-агента Chrome у Firefox. Браузери мають велику кількість вторинних артефактів, окрім navigator.userAgent, які належать саме до тієї чи іншої платформи.

Приклад капчі

Об'єкт завдання

Властивість Тип Обов’язково Призначення
type Рядок Так HCaptchaTaskProxyless
websiteURL Рядок Так Адреса цільової веб-сторінки. Може бути розміщена де завгодно на веб-сайті, навіть у клієнтській області. Наші працівники не переходять туди, а замість цього імітують відвідування.
websiteKey Рядок Так hCaptcha sitekey
userAgent Рядок Так Укажіть агент користувача, який ви використовуєте для навігації по веб-сайту. Наші працівники використовуватимуть те саме значення під час процесу вирішення Hcaptcha.
Застаріла. Замість цього використовуйте User-Agent від наших працівників, який повертається методом "getTaskResult".
isInvisible Логічний Ні Укажіть, чи буде Hcaptcha невидимим. Це створить відповідний віджет для наших працівників.
enterprisePayload Об'єкт Ні Додаткові параметри, які ми будемо використовувати для відтворення віджета Hcaptcha для версії Enterprise.

Властивість Тип Обов’язково
rqdata Рядок Ні
sentry Логічний Ні
apiEndpoint Рядок Ні
endpoint Рядок Ні
reportapi Рядок Ні
assethost Рядок Ні
imghost Рядок Ні

Приклад запиту

CURL
          curl -i -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -X POST -d '{
    "clientKey":"YOUR_API_KEY_HERE",
    "task":
        {
            "type":"HCaptchaTaskProxyless",
            "websiteURL":"https://hcaptcha.com/",
            "websiteKey":"00000000-0000-0000-0000-000000000000",
            "isInvisible": false
        },
    "softId": 0
}' https://api.anti-captcha.com/createTask

# Enterprise version:
curl -i -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -X POST -d '{
    "clientKey":"YOUR_API_KEY_HERE",
    "task":
        {
            "type":"HCaptchaTaskProxyless",
            "websiteURL":"https://hcaptcha.com/",
            "websiteKey":"00000000-0000-0000-0000-000000000000",
            "isInvisible": false,
            "enterprisePayload": {
              "rqdata": "rqdata value from target website",
              "sentry": true
            }
        },
    "softId": 0
}' https://api.anti-captcha.com/createTask
        
PHP
          <?php

//git clone git@github.com:AdminAnticaptcha/anticaptcha-php.git

include("anticaptcha.php");
include("hcaptchaproxyless.php");

$api = new HCaptchaProxyless();
$api->setVerboseMode(true);

//your anti-captcha.com account key
$api->setKey("YOUR_API_KEY_HERE");

//target website address
$api->setWebsiteURL("http://makeawebsitehub.com/recaptcha/test.php");

//hcaptcha key from target website
$api->setWebsiteKey("f9630567-0000-0000-0000-9c91c6276dff");

//Specify softId to earn 10% commission with your app.
//Get your softId here: https://anti-captcha.com/clients/tools/devcenter
$api->setSoftId(0);

//optional invisible Hcaptcha flag
//$api->setIsInvisible();

//set Enterprise parameters this way:
//$api->setEnterprisePayload([
//    "rqdata"    =>  "somerqdata",
//    "sentry"    =>  true
//]);

//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 {

    $gResponse = $api->getTaskSolution();
    echo "\n";
    echo "your hcaptcha token: $gResponse\n\n";

}
        
Python
          #pip3 install anticaptchaofficial

from anticaptchaofficial.hcaptchaproxyless import *

solver = hCaptchaProxyless()
solver.set_verbose(1)
solver.set_key("YOUR_API_KEY_HERE")
solver.set_website_url("https://website.com")
solver.set_website_key("SITE_KEY")

# tell API that Hcaptcha is invisible
#solver.set_is_invisible(1)

# set here parameters like rqdata, sentry, apiEndpoint, endpoint, reportapi, assethost, imghost
#solver.set_enterprise_payload({
#    "rqdata": "rq data value from target website",
#    "sentry": True
#})

# 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)

g_response = solver.solve_and_return_solution()
if g_response != 0:
    print "g-response: "+g_response
else:
    print "task finished with error "+solver.error_code
        
NodeJS
          //npm install @antiadmin/anticaptchaofficial
//https://github.com/AdminAnticaptcha/anticaptcha-npm

const ac = require("@antiadmin/anticaptchaofficial");

//set Hcaptcha Enterprise payload if any
const enterprisePayload = {
   "rqdata": "rqdata from target website",
   "sentry": true
   //etc
}
//if it is non-Enteprise, set to null
//const enterprisePayload = null;

//set to true if you want us to render it in invisible mode
const isInvisible = false;

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.solveHCaptchaProxyless('http://DOMAIN.COM', 'WEBSITE_KEY', '', enterprisePayload, isInvisible)
    .then(gresponse => {
        console.log('g-response: '+gresponse);
    })
    .catch(error => console.log('test received error '+error));
        
C#
          //git clone git@github.com:AdminAnticaptcha/anticaptcha-csharp

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 HCaptchaProxyless
            {
                ClientKey = "YOUR_API_KEY_HERE",
                WebsiteUrl = new Uri("http://makeawebsitehub.com/recaptcha/test.php"),
                WebsiteKey = "51829642-0000-0000-896c-594f89d700cc",
                // Specify softId to earn 10% commission with your app.
                // Get your softId here:
                // https://anti-captcha.com/clients/tools/devcenter
                SoftId = 0
            };

            // use to set invisible mode
            //api.IsInvisible = true

            // use to set Hcaptcha Enterprise parameters like rqdata, sentry, apiEndpoint, endpoint, reportapi, assethost, imghost
            //api.EnterprisePayload.Add("rqdata", "rqdata value from target website");
            //api.EnterprisePayload.Add("sentry", "true");

            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: " + api.GetTaskSolution().GRecaptchaResponse, DebugHelper.Type.Success);

        }
    }
}
        
Java
          //git clone git@github.com:AdminAnticaptcha/anticaptcha-java.git

package com.anti_captcha;

import com.anti_captcha.Api.HCaptchaProxyless;
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);

        HCaptchaProxyless api = new HCaptchaProxyless();
        api.setClientKey("YOUR_API_KEY_HERE");
        api.setWebsiteUrl(new URL("http://makeawebsitehub.com/recaptcha/test.php"));
        api.setWebsiteKey("6LfI9IsUAAAAAKuvopU0hfY8pWADfR_mogXokIIZ");

        // uncomment to tell API that HCaptcha is in invisible mode
//        api.setIsInvisible(true);

        // uncomment and use for HCaptcha Enterprise version if you need to set parameters like rqdata, sentry, apiEndpoint, endpoint, reportapi, assethost, imghost
//        JSONObject enterprisePayload = new JSONObject();
//        try {
//            enterprisePayload.put("rqdata", "rqdata from the target website");
//            enterprisePayload.put("sentry", Boolean.TRUE);
//            enterprisePayload.put("apiEndpoint", "https://...");
//        } catch (Exception e) {
//            DebugHelper.out("JSON error: "+e.getMessage(), DebugHelper.Type.ERROR);
//            return;
//        }
//        api.setEnterprisePayload(enterprisePayload);

        //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: " + api.getTaskSolution().getGRecaptchaResponse(), 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 секунди.

Об’єкт рішення завдання

Властивість Тип Призначення
gRecaptchaResponse Рядок Рядок токена, який необхідний для відправки форми запиту на цільовому веб-сайті.
respKey Рядок Виведення функції "window.hcaptcha.getRespKey()", якщо вона доступна. Деякі сайти використовують її для додаткової перевірки.
userAgent Рядок User-Agent браузера працівника. Використовуйте його при відправці токена відповіді.

Приклад відповіді

JSON без помилок
          {
    "errorId":0,
    "status":"ready",
    "solution":
    {
        "gRecaptchaResponse":"3AHJ_VuvYIBNBW5yyv0zRYJ75VkOKvhKj9_xGBJKnQimF72rfoq3Iy-DyGHMwLAo6a3......",
        "respKey":"E0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoiQk5vb1JuZ0FPSHBCM2EyWURSSC......",
        "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0"
    },
    "cost":"0.001500",
    "ip":"46.98.54.221",
    "createTime":1472205564,
    "endTime":1472205570,
    "solveCount":"0"
}