Menu

프록시를 통해 턴스타일 CAPTCHA 풀기

턴스타일 CAPTCHA는 reCAPTCHA를 대체하기 위한 대안 중 하나로, 수동, 비대화형, Invisible 등 모든 하위 유형을 자동으로 지원하고 있으며, 하위 유형을 지정할 필요가 없습니다. 또한, 사용자 지정 사용자 에이전트를 제공할 필요도 없으며, 작동하지도 않습니다.

해당 유형의 작업에는 프록시가 필요하며, 작업 속도고 느려지므로 프록시를 사용하지 않는 작업(TurnstileTaskProxyless)이 실패하는 경우에만 사용하시기 바랍니다. 프록시와 함께 CAPTCHA를 풀려면 자체 VPS 서버에 설치해야 하는 고품질의 프록시가 필요하며, 구매한 프록시 서버는 절대 사용하지 마시기 바랍니다.

Turnstile captcha example
CAPTCHA 예제
Python
Node.js
Go
PHP
Java
C#
bash

Python에서 Cloudflare Turnstile proxy-on을(를) 해결하는 방법

#pip3 install anticaptchaofficial

from anticaptchaofficial.turnstileproxyon import *

solver = turnstileProxyon()
solver.set_verbose(1)
solver.set_key("YOUR_API_KEY_HERE")
solver.set_website_url("https://website.com/")
solver.set_website_key("sitekey_here")
solver.set_proxy_address("PROXY_ADDRESS")
solver.set_proxy_port(1234)
solver.set_proxy_login("proxylogin")
solver.set_proxy_password("proxypassword")

# Optionally specify page action
solver.set_action("login")

# Optionally specify cData and chlPageData tokens for Cloudflare pages
#solver.set_cdata("cdata_token")
#solver.set_chlpagedata("chlpagedata_token")

# 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("token: "+token)
    # user-agent in case you need it:
    print("user-agent: "+solver.get_user_agent())
else:
    print("task finished with error "+solver.error_code)

Node.js에서 Cloudflare Turnstile proxy-on을(를) 해결하는 방법

//npm install @antiadmin/anticaptchaofficial
//https://github.com/anti-captcha/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.solveTurnstileProxyOn('http://DOMAIN.COM',
    'WEBSITE_KEY',
    'http', //http, socks4, socks5
    'PROXY_ADDRESS',
    'PROXY_PORT',
    'PROXY_LOGIN',
    'PROXY_PASSWORD',
    'optional_action',
    'optional_cData_token',
    'optional_chlPageData_token')
    .then(token => {
        console.log('token: '+token);
    })
    .catch(error => console.log('test received error '+error));

// in case you need it
console.log("worker's user-agent:");
console.log(ac.getUserAgent());

Go에서 Cloudflare Turnstile proxy-on을(를) 해결하는 방법

// Install with:
// go get github.com/anti-captcha/anticaptcha-go
package main

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

func main() {
    // Create API client and set the API Key
    ac := anticaptcha.NewClient("API_KEY_HERE")

    // set to 'false' to turn off debug output
    ac.IsVerbose = true

    // Specify softId to earn 10% commission with your app.
    // Get your softId here: https://anti-captcha.com/clients/tools/devcenter
    //ac.SoftId = 1187

    // Make sure the API key funds balance is positive
    balance, err := ac.GetBalance()
    if err != nil {
        log.Fatal(err)
        // Exit program to make sure you don't DDoS API with requests, while having empty balance
        return
    }
    fmt.Println("Balance:", balance)

    // Solve Turnstile with proxy
    solution, err := ac.SolveTurnstileProxyOn(anticaptcha.Turnstile{
        WebsiteURL: "https://www.website.com/",
        WebsiteKey: "0x4AAAAAAABD2Inoxs-yJ8bz",
        //Action: "optional page action",
        //CData: "cdata token for cloudflare",
        //ChlPageData: "chlPageData token for cloudflare",
        Proxy: &anticaptcha.Proxy{
            Type:      "http",
            IPAddress: "1.2.3.4",
            Port:      1234,
            Login:     "login-optional",
            Password:  "pass-optional",
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Turnstile Token:", solution)
    // In case you need the worker's user-agent
    fmt.Println("User-Agent:", ac.WorkersUserAgent)
}

PHP에서 Cloudflare Turnstile proxy-on을(를) 해결하는 방법

//git clone https://github.com/anti-captcha/anticaptcha-php.git

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

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

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

//target website address
$api->setWebsiteURL("https://website.com/");

//turnstile key from target website
$api->setWebsiteKey("0xAAAAAAAABBBBBBBCCCCCC");

//optional action parameter, search it in page source code
$api->setAction("login_register_or_else");

//optional cData and chlPageData token parameters for Cloudflare
//$api->setCData("token_value");
//$api->setChlPageData("token_value");

// proxy access parameters
// DO NOT USE PURCHASED/RENTED PROXIES ON PROXY SERVICES!!!
// THEY WILL NOT WORK!
// USE ONLY PROXIES YOU INSTALL YOURSELF ON YOUR OWN SERVER OR FAST VPS
// USE PROPER PROXY SOFTWARE LIKE SQUID !
// INSTALLATION INSTRUCTIONS:
// https://anti-captcha.com/apidoc/articles/how-to-install-squid
$api->setProxyType("http");
$api->setProxyAddress("8.8.8.8");
$api->setProxyPort(1234);
//optional login and password
$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);

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

    $token    =   $api->getTaskSolution();
    echo "\n";
    echo "your turnstile token: $token\n\n";
    echo "worker's user-agent in case you need it:\n";
    echo $api->getWorkersUserAgent()."\n";

}

Java에서 Cloudflare Turnstile proxy-on을(를) 해결하는 방법

//git clone https://github.com/anti-captcha/anticaptcha-java.git

package com.anti_captcha;

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

        Turnstile api = new Turnstile();
        api.setClientKey("API_KEY_HERE");
        api.setWebsiteUrl(new URL("http://website.com"));
        api.setWebsiteKey("sitekey_here");

        //Optional page action
        api.setAction("optional_page_action");

        //Optionally specify cData and chlPageData tokens for Cloudflare pages
        //api.setCData("cdata_token");
        //api.setChlPageData("chlPageData_token");

        // proxy access parameters
        // DO NOT USE PURCHASED/RENTED PROXIES WITH PROXY SERVICES!!!
        // THEY WILL NOT WORK!
        // USE ONLY PROXIES YOU INSTALL YOURSELF ON YOUR OWN SERVER OR FAST VPS
        // USE PROPER PROXY SOFTWARE LIKE SQUID !
        // INSTALLATION INSTRUCTIONS:
        // https://anti-captcha.com/apidoc/articles/how-to-install-squid
        api.setProxyType(NoCaptcha.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: " + api.getTaskSolution().getToken(), DebugHelper.Type.SUCCESS);
        }
    }
}

C#에서 Cloudflare Turnstile proxy-on을(를) 해결하는 방법

//git clone https://github.com/anti-captcha/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 Turnstile
            {
                ClientKey = "YOUR_API_KEY_HERE",
                WebsiteUrl = new Uri("http://website.com"),
                WebsiteKey = "sitekey",
                // Optional page action
                Action = "optional_page_action",
                // Optionally specify cData and chlPageData tokens for Cloudflare pages
                // CData = "cdata_token",
                // ChlPageData = "chlPageData_token",
                ProxyAddress = "xxx.xx.xx.xx",
                ProxyPort = 1234,
                ProxyLogin = "login",
                ProxyPassword = "password",
                // 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: " + api.GetTaskSolution().token, DebugHelper.Type.Success);

        }
    }
}

bash에서 Cloudflare Turnstile proxy-on을(를) 해결하는 방법

curl -i -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -X POST -d '{
    "clientKey":"YOUR_API_KEY_HERE",
    "task":
        {
            "type":"TurnstileTask",
            "websiteURL":"https://website.com/",
            "websiteKey":"0xAAAAAAAABBBBBBBCCCCCC",
            "action":"optional_page_action",,
            "cData":"optional_cData_token_for_cloudflare",
            "chlPageData":"optional_cData_token_for_cloudflare",
            "proxyType":"http",
            "proxyAddress":"8.8.8.8",
            "proxyPort":8080,
            "proxyLogin":"proxyLoginHere",
            "proxyPassword":"proxyPasswordHere"
        },
    "softId": 0
}' https://api.anti-captcha.com/createTask

작업 객체

속성 유형 필수 목적
type 문자열 TurnstileTask
websiteURL 문자열 대상 웹페이지 주소. 회원 영역을 포함하여 웹사이트의 어느 곳에나 위치할 수 있습니다. 당사의 작업자는 해당 페이지를 탐색하지는 않으나, 대신에 해당 페이지의 방문 시뮬레이션합니다.
websiteKey 문자열 턴스타일 사이트 키
action 문자열 아니요 선택적 "action" 매개변수.
cData 문자열 아니요 선택적 "cData" 토큰
관련 문서: 관련 문서: Cloudflare 우회하는 방법
chlPageData 문자열 아니요 선택적 "chlPageData" 토큰
proxyType 문자열 프록시 유형
http - 일반적인 http/https 프록시
socks4 - socks4 프록시
socks5 - socks5 프록시
proxyAddress 문자열 프록시 IP 주소 ipv4/ipv6. 로컬 네트워크의 호스트명이나 IP 주소는 필요 없습니다.
proxyPort 정수 프록시 포트
proxyLogin 문자열 인증이 필요한 프록시 로그인 (기본)
proxyPassword 문자열 프록시 비밀번호

작업 솔루션 객체

속성 유형 목적
token 문자열 대상 웹사이트의 제출 양식과 상호작용하는 데 필요한 토큰 문자열.
userAgent 문자열 작업자 브라우저의 사용자 에이전트. 응답 토큰을 제출할 때 사용합니다.

응답 예제

{
    "errorId":0,
    "status":"ready",
    "solution":
    {
        "token":"0.vtJqmZnvobaUzK2i2PyKaSqHELYtBZfRoPwMvLMdA81WL_9G0vCO3y2VQVIeVplG0mxYF7uX.......",
        "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"
}