# GeeTest Captcha V4

### Các kiểu Captcha GeeTest hỗ trợ <a href="#support-img-types" id="support-img-types"></a>

| Hình minh họa                                                       | Kiểu  | Ghi chú |
| ------------------------------------------------------------------- | ----- | ------- |
| ![](/files/DhC6243U7NzD1prlGiq0)                                    | slide |         |
| <img src="/files/S6kpVrKKtzP2QwQOQByY" alt="" data-size="original"> | click |         |

### 1. Tìm captcha id của Geetest Captcha V4

Mở developer's console của browser và tìm **`script`** element mà load GeeTest v4 script, trong đó sẽ có chứa tham số `captcha_id` mà bạn cần nằm trong thuộc tính `src` của script.

<figure><img src="/files/OejFwVCvxN2Vucyf89Dc" alt=""><figcaption></figcaption></figure>

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

<mark style="color:red;">**POST :**</mark> <mark style="color:red;"></mark><mark style="color:red;">`https://anticaptcha.top/api/captcha`</mark>

**Các tham số Body**:

<table data-header-hidden><thead><tr><th width="157">Tên trường dữ liệu</th><th width="131"></th><th width="105"></th><th></th></tr></thead><tbody><tr><td><strong>Tên trường dữ liệu</strong></td><td><strong>Kiểu dữ liệu</strong></td><td><strong>Bắt buộc</strong></td><td><strong>Mô tả</strong></td></tr><tr><td>apikey</td><td>String</td><td>x</td><td>Key duy nhất để xác định đối tác API</td></tr><tr><td>type</td><td>Interger</td><td>x</td><td>Giá trị: <mark style="color:red;"><strong>22</strong></mark></td></tr><tr><td>captchaId</td><td>String</td><td>x</td><td>Giá trị <em>captcha_id</em> của GeeTest</td></tr><tr><td>pageurl</td><td>String</td><td>x</td><td>url của webpage hiển thị GeeTest Captcha mà bạn muốn giải<br>Ví dụ: <a href="https://gt4.geetest.com/">https://gt4.geetest.com/</a><br><a href="https://www.geetest.com/en/adaptive-captcha-demo">https://www.geetest.com/en/adaptive-captcha-demo</a><br></td></tr><tr><td>geetestApiServerSubdomain</td><td>String</td><td></td><td>Subdomain của api<br>Ví dụ: api-na.geetest.com</td></tr><tr><td>proxy</td><td>String</td><td></td><td>Định dạng ip:port:username:password<br><em>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</em></td></tr><tr><td>proxyType</td><td>String</td><td></td><td>Kiểu Proxy:<br><strong>http</strong><br><strong>https</strong><br><strong>socks5</strong></td></tr><tr><td>proxyAddress</td><td>String</td><td></td><td>địa chỉ IP hoặc hostname của Proxy<br>Ví dụ: 103.124.95.45</td></tr><tr><td>proxyPort</td><td>String</td><td></td><td>Proxy port<br>Ví dụ: 8686</td></tr><tr><td>proxyLogin</td><td>String</td><td></td><td>Username proxy nếu có</td></tr><tr><td>proxyPassword</td><td>String</td><td></td><td>Password proxy nếu có</td></tr><tr><td>userAgent</td><td>String</td><td></td><td>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</td></tr></tbody></table>

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

{
	"apikey": "YOUR_API_KEY",
	"type": 22, // captcha id của Geetest V4
	"captchaId": "54088bb07d2df3c46b79f80300b0abbe", // thay bằng captcha_id geetest của bạn
	"pageurl": "https://gt4.geetest.com/" // 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

<table data-header-hidden><thead><tr><th width="201"></th><th width="137"></th><th></th></tr></thead><tbody><tr><td><strong>Tên trường dữ liệu</strong></td><td><strong>Kiểu dữ liệu</strong></td><td><strong>Mô tả</strong></td></tr><tr><td>success</td><td>boolean</td><td><p>Mã thông báo xác định kết quả của bước gửi captcha qua POST</p><p><mark style="color:red;"><strong>true</strong></mark>: Thành công<br><mark style="color:red;"><strong>false</strong></mark>: Thất bại</p></td></tr><tr><td>message</td><td>String</td><td>Thông báo tương ứng nếu có</td></tr><tr><td>captcha</td><td>String</td><td>kết quả giải ra = token dùng để vượt GeeTest Captcha V4</td></tr><tr><td>base64img</td><td>String</td><td>Không dùng đến</td></tr></tbody></table>

{% tabs %}
{% tab title="Thành công" %}

```json
{
	"success": true,
	"message": "Thành công",
	"captcha": ""captcha": "{\"captcha_id\":\"e392e1d7fd421dc63325744d5a2b9c73\",\"captcha_output\":\"fN36ufW6cQN-UMXTCVLbpiXSTDg3WKOIXwNq-tTP7vMpGNNPZmVuUX0OUZtf-froY23s7-xO571B0UIek3UIqhLorlmV8e6fw4RTRbgZ0-E0a5fBUO7MnsB0RW-1Jrbr0V-8NaSWVc20NodzKxeM5Cso8SWDoMgZOS2BRklgGbB6jn5H8A6Wrt4JyYuYgv9W3D2Wcr4US89oxhkHzhQbToDOObY_0rRWY0PQPPJMM77YQOT_RNge5DeI-_MkZ8zQmBXBXdEu1dERay5ZxrAimw==\",\"gen_time\":\"1698205949\",\"lot_number\":\"b594e81981ec480ea39f2df034673b2e\",\"pass_token\":\"885e7cefc60db805cb665e65d29750467c6a61b1922e3fb0342b60ce46f35ade\",\"risk_type\":\"slide\"}", //kết quả giải ra
	"base64img": null
}
```

{% endtab %}

{% tab title="Thất bại" %}

```json
{
	"success": false,
	"message": null,
	"captcha": null,
	"base64img": null
}
```

hoặc

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

hoặc

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

{% endtab %}
{% endtabs %}

### 4. Code mẫu

{% tabs %}
{% tab title="C#" %}

```csharp
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=22,string captchaid,string pageurl)
    {
        var data = new
        {
            apikey = apiKey,
            type = type,
            captchaId = captchaid,
            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;
    }
}
```

{% endtab %}

{% tab title="PHP Curl" %}

```php
<?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\n22\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"captchaId\"\r\n\r\n54088bb07d2df3c46b79f80300b0abbe\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"pageurl\"\r\n\r\n[url chứa geetest captcha]\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;
}
```

{% endtab %}

{% tab title="Javascript Jquery AJAX" %}

```javascript
var form = new FormData();
form.append("apikey", "[apikey]");
form.append("type", "22");
form.append("captchaId", "54088bb07d2df3c46b79f80300b0abbe");
form.append("pageurl", "[url chứa geetest captcha]");

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);
});
```

{% endtab %}
{% endtabs %}

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

Sử dụng các giá trị được trả về trên trang web mục tiêu của bạn giống như cách chúng được sử dụng khi bạn giải hình ảnh xác thực theo cách thủ công. Có thể có một biểu mẫu với một tập hợp các input ẩn hoặc callback JavaScript. Hoặc bạn có thể chỉ cần xây dựng một yêu cầu HTTP với dữ liệu cần thiết

### *<mark style="color:red;">Lưu ý</mark>:* Nên sử dụng phần mềm PostMan để kiểm tra chạy test trước


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.anticaptcha.top/su-dung-api/api-giai-captcha/geetest-captcha-v4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
