ANTICAPTCHA.TOP - API Docs
  • Hướng dẫn
  • Sử dụng API
    • API lấy số dư tài khoản
    • API lấy dịch vụ
    • API giải captcha
      • Image to Text - Captcha dạng ảnh chữ
      • ReCAPTCHA V2
      • ReCAPTCHA V3
      • GeeTest Captcha V3
      • GeeTest Captcha V4
      • Amazon AWF Captcha
      • Shopee Slide Captcha
      • Cloudflare Turnstile
      • TikTok kéo thả - Web
      • TikTok chọn 2 đối tượng - Web
      • TikTok xoay đối tượng - Web
      • TikTok kéo thả - App
      • TikTok chọn 2 đối tượng - App
      • Zalo kéo thả - App
      • Zalo chọn hình ảnh - Web
  • Extension cho trình duyệt
    • Extension AntiCaptcha.top cho Chrome/Cốc Cốc
    • Extension AntiCaptcha.top cho Firefox
  • 💥API V2
Powered by GitBook
On this page
  • 1. Tìm Sitekey của Captcha Cloudflare Turnstile
  • 2. Tạo yêu cầu/Request
  • 3. Nhận kết quả trả về/Response
  • 4. Code mẫu
  • 5. Sử dụng kết quả token nhận được
  • Lưu ý: Nên sử dụng phần mềm PostMan để kiểm tra chạy test trước
  1. Sử dụng API
  2. API giải captcha

Cloudflare Turnstile

Hướng dẫn sử dụng API Giải Captcha Cloudflare Turnstile của anticaptcha.top

PreviousShopee Slide CaptchaNextTikTok kéo thả - Web

Last updated 2 months ago

Cloudflare Turnstile là một loại captcha khá mới gần giống với reCAPTCHA và hCaptcha và trông giống như sau:

1. Tìm Sitekey của Captcha Cloudflare Turnstile

Đầu tiên, bạn cần tìm giá trị của tham sốsitekey trong mã nguồn của trang web chứa Captcha Cloudflare Turnstile. Mở bảng điều khiển dành cho nhà phát triển trong trình duyệt của bạn và tìm phần tử có thuộc tính sitekey

2. Tạo yêu cầu/Request

POST : https://anticaptcha.top/api/captcha

Các tham số Body:

Tên trường dữ liệu

Kiểu dữ liệu

Bắt buộc

Mô tả

apikey

String

x

Key duy nhất để xác định đối tác API

type

Interger

x

Giá trị: 23

websitekey

String

x

Sitekey Cloudflare Turnstile cần view code url chứa Cloudflare Turnstile để lấy sitekey

pageurl

String

x

proxy

String

Định dạng ip:port:username:password Nếu truyền dạng này thì ko cần truyền các trường dữ liệu proxy ở dưới nữa

proxyType

String

Kiểu Proxy: http https socks5

proxyAddress

String

địa chỉ IP hoặc hostname của Proxy Ví dụ: 103.124.95.45

proxyPort

String

Proxy port Ví dụ: 8686

proxyLogin

String

Username proxy nếu có

proxyPassword

String

Password proxy nếu có

userAgent

String

User-Agent của trình duyệt của bạn sẽ được sử dụng để tải captcha. Chỉ sử dụng User-Agent của các trình duyệt hiện đại

POST HTTP
Url: https://anticaptcha.top/api/captcha
Content-Type: application/json

{
	"apikey": "YOUR_API_KEY",
	"type": 23, // id cho Cloudflare Turnstile
	"websitekey": "0x4AAAAAAAEwzhD6pyKkgXC0", // thay bằng sitekey của bạn
	"pageurl": "https://turnstile.zeroclover.io" // thay bằng url của bạn
	........ // các trường dữ liệu khác nữa nếu có
}

3. Nhận kết quả trả về/Response

Kết quả trả về dạng JSON gồm các trường sau

Tên trường dữ liệu

Kiểu dữ liệu

Mô tả

success

boolean

Mã thông báo xác định kết quả của bước gửi captcha qua POST

true: Thành công false: Thất bại

message

String

Thông báo tương ứng nếu có

captcha

String

kết quả giải ra = token dùng để vượt captcha Cloudflare Turnstile

{
	"success": true,
	"message": "Thành công",
	"captcha": "{\"token\":\"0.u0Ww73IJkutlGV...\",\"cf_clearance\":null}", //kết quả giải ra
	"base64img": null
}
{
	"success": false,
	"message": null,
	"captcha": null,
	"base64img": null
}

hoặc

{
	"success": false,
	"message": "Số xu không đủ",
	"captcha": ""
}

hoặc

{
	"success": false,
	"message": "Api key không chính xác",
	"captcha": ""
}

4. Code mẫu

public class CatpchaResult
{
    public string log { get; set; }
    public bool status { get; set; }
    public string catcha { get; set; }
}
public class AnticaptchaTopApi
{
    public string apiKey = "";
    public string Post(string url, object data, string method = "POST")
    {
        int num = 0;
        NameValueCollection values;
        while (num < 1)
        {
            try
            {
                using (WebClient webClient = new WebClient())
                {
                    values = new NameValueCollection();
                    if (data != null)
                    {
                        data.GetType().GetProperties().ToList().ForEach(delegate (PropertyInfo pi)
                        {
                            values.Add(pi.Name, (pi.GetValue(data, null) ?? "").ToString());
                        });
                        byte[] bytes = webClient.UploadValues(url, method, values);
                        return Encoding.UTF8.GetString(bytes);
                    }
                    return webClient.DownloadString(url);
                }
             }
            catch
            {                
            }
        }
        return "";
    }
    public CatpchaResult GetCatpcha(int type=23,string websitekey,string pageurl)
    {
        var data = new
        {
            apikey = apiKey,
            type = type,
            websitekey = websitekey,
            pageurl = pageurl
        };
        var rs = new CatpchaResult
        {
            status = false
        };
        try
        {
            var result = JsonConvert.DeserializeObject<dynamic>(Post("https://anticaptcha.top/api/captcha", data));
            if (result.success == true)
            {
                rs.status = true;
                rs.catcha = result.captcha;
                rs.log = result.message;
            }
        }
        catch
        {
        }
        return rs;
    }
}
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://anticaptcha.top/api/captcha",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"apikey\"\r\n\r\n[apikey]\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"type\"\r\n\r\n23\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"websitekey\"\r\n\r\n0x4AAAAAAAEwzhD6pyKkgXC0\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"pageurl\"\r\n\r\n[url chứa hcaptcha]\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
var form = new FormData();
form.append("apikey", "[apikey]");
form.append("type", "23");
form.append("websitekey", "0x4AAAAAAAEwzhD6pyKkgXC0");
form.append("pageurl", "https://turnstile.zeroclover.io");

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://anticaptcha.top/api/captcha",
  "method": "POST",
  "headers": {
    "cache-control": "no-cache"
  },
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

5. Sử dụng kết quả token nhận được

Định vị phần tử có name là cf-turnstile-response và đưa giá trị token giải ra vào phần tử đó rồi submit form.

Ngoài ra, có thể có một callback được định nghĩa trong lệnh gọi Turntile.render

Lưu ý: Nên sử dụng phần mềm PostMan để kiểm tra chạy test trước

url của webpage hiển thị Cloudflare Turnstile mà bạn muốn giải Ví dụ:

https://demo.turnstile.workers.dev
https://turnstile.zeroclover.io