# reCAPTCHA v2

> รับ token ของ reCAPTCHA v2 (แบบมีช่องทำเครื่องหมาย แบบ invisible และแบบ Enterprise) ด้วย YesCaptcha: ประเภทงานและราคา พารามิเตอร์ของคำขอ ตัวอย่าง curl/Python/Node.js และผลลัพธ์ที่ได้รับ

Source: https://docs.yescaptcha.com/th/tasks/recaptcha-v2/ · Last verified: 2026-10-15

> This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/recaptcha-v2/

งาน reCAPTCHA v2 จะคืนค่า token (`gRecaptchaResponse`) ซึ่งคุณนำไปส่งให้เว็บไซต์ปลายทางเพื่อผ่านการตรวจสอบได้เลยโดยไม่ต้องคลิกรูปภาพ ประเภท `NoCaptchaTaskProxyless` ที่ใช้บ่อยที่สุดมีราคา 15 พอยต์ (≈ $2.25 / 1k) ต่องาน และทำงานแบบอะซิงโครนัส: เรียก `createTask` เพื่อสร้างงานก่อน แล้วเรียก `getTaskResult` ทุก 5 วินาทีเพื่อรับผลลัพธ์ งานที่แก้ไม่สำเร็จหรือหมดเวลาจะคืนพอยต์โดยอัตโนมัติ

- POST `https://api.yescaptcha.com/createTask` (endpoint ทั่วโลก)
- POST `https://cn.yescaptcha.com/createTask` (endpoint จีน)

เนื้อหาคำขอเป็น JSON และใช้ `clientKey` (ClientKey ของบัญชี คัดลอกได้จากแดชบอร์ดที่ [yescaptcha.com](https://yescaptcha.com/)) ในการยืนยันตัวตน สร้างงานที่ endpoint ใด ให้ตรวจสอบผลลัพธ์ที่ endpoint เดียวกัน

## กรณีที่ใช้

-   หน้าเว็บมีช่องทำเครื่องหมาย “ฉันไม่ใช่โปรแกรมอัตโนมัติ” (I’m not a robot): แบบมีช่องทำเครื่องหมาย
-   ไม่มีช่องทำเครื่องหมาย และมีโจทย์รูปภาพปรากฏขึ้นหลังจากคลิกปุ่มส่งเท่านั้น: แบบ invisible ให้เพิ่ม `"isInvisible": true`
-   หน้าเว็บโหลด `recaptcha/enterprise.js` หรือ URL ของคำขอมีคำว่า `enterprise`: แบบ Enterprise ให้ใช้ประเภทที่มีคำว่า `Enterprise` ในชื่อ

หากไม่แน่ใจว่าเป็นแบบใด ดู [การระบุประเภท CAPTCHA](https://docs.yescaptcha.com/th/guides/identify-captcha.md) หาก token ผ่านได้ไม่ดีนัก ลองใช้ [การจดจำภาพ reCAPTCHA v2](https://docs.yescaptcha.com/th/tasks/recaptcha-classification.md) แทน: API จะบอกว่าต้องคลิกรูปใด แล้วคุณคลิกเองในเบราว์เซอร์

## ประเภทงานและราคา

| ประเภทงาน | ราคา | รูปแบบการคืนผลลัพธ์ | หมายเหตุ |
| --- | --- | --- | --- |
| `NoCaptchaTaskProxyless` | $2.25 / 1k; 15 พอยต์/งาน · ¥15 / 1k | แบบอะซิงโครนัส |  |
| `RecaptchaV2TaskProxyless` | $3.00 / 1k; 20 พอยต์/งาน · ¥20 / 1k | แบบอะซิงโครนัส | พารามิเตอร์เหมือนกับ NoCaptchaTaskProxyless แต่ใช้เส้นทางต่างกัน สามารถใช้สลับเป็นตัวสำรองของกันและกันได้ |
| `NoCaptchaTask` | $2.25 / 1k; 15 พอยต์/งาน · ¥15 / 1k | แบบอะซิงโครนัส | ใช้พร็อกซีของคุณเอง |
| `RecaptchaV2EnterpriseTaskProxyless` | $3.00 / 1k; 20 พอยต์/งาน · ¥20 / 1k | แบบอะซิงโครนัส |  |
| `RecaptchaV2EnterpriseTask` | $3.00 / 1k; 20 พอยต์/งาน · ¥20 / 1k | แบบอะซิงโครนัส | ใช้พร็อกซีของคุณเอง |

ราคาเป็นดอลลาร์สหรัฐเป็นเพียงค่าประมาณที่ US$1 ≈ ¥6.67 งานจะถูกหักเป็นพอยต์

-   `NoCaptchaTaskProxyless` และ `RecaptchaV2TaskProxyless` ใช้พารามิเตอร์เหมือนกันแต่ใช้คนละเส้นทาง หากประเภทหนึ่งผ่านได้ไม่ดีนัก ลองสลับไปใช้อีกประเภทหนึ่ง
-   ประเภทที่ไม่มีคำว่า `Proxyless` ในชื่อ (`NoCaptchaTask`, `RecaptchaV2EnterpriseTask`) จะโหลด CAPTCHA ผ่านพร็อกซีของคุณเอง และต้องส่งฟิลด์ `proxyType`, `proxyAddress`, `proxyPort` และฟิลด์ที่เกี่ยวข้อง ใช้เมื่อเว็บไซต์ปลายทางตรวจสอบ IP ของผู้เข้าชม

## พารามิเตอร์ของคำขอ

ฟิลด์ของออบเจ็กต์ `task` ใน `createTask`:

| ฟิลด์ | ประเภท | จำเป็น | คำอธิบาย |
| --- | --- | --- | --- |
| `type` | string | ใช่ | ประเภทงาน ดูค่าที่ใช้ได้ในหัวข้อ "ประเภทงานและราคา" ของหน้านี้ |
| `websiteURL` | string | ใช่ | URL แบบเต็มของหน้าเว็บที่แสดง CAPTCHA ให้ระบุเว็บไซต์ที่คุณเห็น CAPTCHA ไม่ใช่โดเมนของผู้ให้บริการ CAPTCHA |
| `websiteKey` | string | ใช่ | คีย์ของเว็บไซต์ (sitekey) หาได้จากซอร์สโค้ดของหน้าเว็บหรือจากคำขอเครือข่าย โดยทั่วไปจะไม่เปลี่ยนแปลง |
| `isInvisible` | boolean | ไม่ | ส่ง true เมื่อเป็นเวอร์ชัน invisible หากไม่ใช่ไม่ต้องส่ง |
| `proxyType` | string | บางประเภท | โปรโตคอลของพร็อกซี: `http`, `https`, `socks4` หรือ `socks5` (จำเป็นสำหรับ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyAddress` | string | บางประเภท | IP แอดเดรสหรือชื่อโฮสต์ของพร็อกซี ไม่สามารถใช้แอดเดรสภายในเครื่องหรือภายในเครือข่าย เช่น 127.0.0.1 หรือ 192.168.x.x ได้ เพราะเซิร์ฟเวอร์ของเราเข้าถึงไม่ได้ (จำเป็นสำหรับ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyPort` | integer | บางประเภท | พอร์ตของพร็อกซี (จำเป็นสำหรับ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyLogin` | string | ไม่ | ชื่อผู้ใช้ของพร็อกซี (เมื่อพร็อกซีต้องมีการยืนยันตัวตน) (เฉพาะ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `proxyPassword` | string | ไม่ | รหัสผ่านของพร็อกซี (เมื่อพร็อกซีต้องมีการยืนยันตัวตน) (เฉพาะ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `userAgent` | string | ไม่ | User-Agent ของเบราว์เซอร์ หากผลลัพธ์มี `userAgent` ให้ใช้ค่านั้นเมื่อส่ง token (เฉพาะ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
| `enterprisePayload` | object | ไม่ | พารามิเตอร์เพิ่มเติมของเวอร์ชัน Enterprise เช่นค่า `s` ของ reCAPTCHA Enterprise: `{"s": "..."}` หากหน้าเว็บไม่ได้ใช้ไม่ต้องส่ง (เฉพาะ RecaptchaV2EnterpriseTaskProxyless, RecaptchaV2EnterpriseTask) |

วิธีค้นหา `websiteURL` และ `websiteKey` ดู [การค้นหาพารามิเตอร์ของ reCAPTCHA](https://docs.yescaptcha.com/th/guides/find-recaptcha-parameters.md)

## ตัวอย่างคำขอ

ใช้หน้าเดโมอย่างเป็นทางการของ Google เป็นตัวอย่าง:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }
}
```

โค้ดฉบับสมบูรณ์ (สร้างงาน เรียกตรวจซ้ำทุก 5 วินาที และพิมพ์ token) ก่อนรัน ให้ใส่ ClientKey ไว้ในตัวแปรสภาพแวดล้อม `YESCAPTCHA_CLIENT_KEY`:

**curl**

```bash
curl -s https://api.yescaptcha.com/createTask \
  -H 'Content-Type: application/json' \
  -d '{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }
}'

# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:
curl -s https://api.yescaptcha.com/getTaskResult \
  -H 'Content-Type: application/json' \
  -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'
```

**Python**

solve.py

```python
import os
import time

import requests

API = "https://api.yescaptcha.com"
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]  # Read the clientKey from an environment variable

def call(method, payload):
    r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30)
    data = r.json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def solve(task):
    task_id = call("createTask", {"task": task})["taskId"]
    for _ in range(36):  # Poll every 5 seconds, for up to about 3 minutes
        time.sleep(5)
        result = call("getTaskResult", {"taskId": task_id})
        if result.get("status") == "ready":
            return result["solution"]
    raise TimeoutError(task_id)

solution = solve({
    "type": "NoCaptchaTaskProxyless",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
})
print(solution["gRecaptchaResponse"])
```

**Node.js**

solve.mjs

```js
const API = 'https://api.yescaptcha.com';
const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable

async function call(method, payload) {
  const res = await fetch(`${API}/${method}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }),
  });
  const data = await res.json();
  if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`);
  return data;
}

async function solve(task) {
  const { taskId } = await call('createTask', { task });
  for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes
    await new Promise((r) => setTimeout(r, 5000));
    const result = await call('getTaskResult', { taskId });
    if (result.status === 'ready') return result.solution;
  }
  throw new Error(`timeout: ${taskId}`);
}

const solution = await solve({
  type: "NoCaptchaTaskProxyless",
  websiteURL: "https://www.google.com/recaptcha/api2/demo",
  websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
});
console.log(solution.gRecaptchaResponse);
```

กรณีแบบ Enterprise ที่หน้าเว็บส่งค่า `s` ให้ reCAPTCHA ให้ใส่ค่านั้นใน `enterprisePayload`:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "RecaptchaV2EnterpriseTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "enterprisePayload": {
      "s": "S_VALUE_FROM_THE_PAGE"
    }
  }
}
```

ใช้พร็อกซีของคุณเอง:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "NoCaptchaTask",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "proxyType": "http",
    "proxyAddress": "proxy.example.com",
    "proxyPort": 8080,
    "proxyLogin": "user",
    "proxyPassword": "pass"
  }
}
```

## ผลลัพธ์

`createTask` จะคืน ID งาน:

```json
{
  "errorId": 0,
  "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}
```

นำ ID นี้ไปเรียก `getTaskResult` ระหว่างที่งานยังประมวลผลอยู่จะได้ `{"errorId": 0, "status": "processing"}` ให้ตรวจสอบอีกครั้งหลังจาก 5 วินาที เมื่อเสร็จสมบูรณ์จะได้:

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..."
  }
}
```

| ฟิลด์ | ประเภท | คำอธิบาย |
| --- | --- | --- |
| `gRecaptchaResponse` | string | token ที่ได้ ใช้ส่งให้เว็บไซต์เป้าหมาย ใช้ได้ครั้งเดียว มีผลประมาณ 120 วินาที แนะนำให้ใช้ภายใน 60 วินาที |

งานประมวลผลนานสุดประมาณ 110 วินาที หากเกินเวลาจะคืน `ERROR_TASK_TIMEOUT` และคืนพอยต์ เมื่อเกิดข้อผิดพลาด `errorId` จะเป็น 1 ให้จัดการตาม `errorCode` ดู [รหัสข้อผิดพลาด](https://docs.yescaptcha.com/th/api/errors.md) วิธีส่ง token หลังจากได้รับแล้ว ดู [การใช้ token เพื่อผ่าน reCAPTCHA](https://docs.yescaptcha.com/th/guides/submit-recaptcha-token.md)

> **เคล็ดลับ:** token ใช้ได้ครั้งเดียวและมีอายุประมาณ 120 วินาที แนะนำให้ส่งภายใน 60 วินาทีหลังจากได้รับ

## คำถามที่พบบ่อย

### ทำไม token ของเว็บไซต์เดียวกันจึงผ่านบ้างไม่ผ่านบ้าง?

เว็บไซต์ปลายทางเป็นผู้ตัดสิน เว็บไซต์จะให้คะแนนการตรวจสอบแต่ละครั้งและกำหนดเกณฑ์ ซึ่งอาจเปลี่ยนแปลงได้ตลอดเวลา อัตราการผ่านจึงต่างกันไปตามเว็บไซต์ และไม่ใช่ทุก token ที่จะผ่าน คุณสามารถลองเปรียบเทียบอัตราการผ่านกับประเภทงานอื่นของ CAPTCHA แบบเดียวกัน หรือเปลี่ยนไปใช้ [การจดจำภาพ](https://docs.yescaptcha.com/th/tasks/recaptcha-classification.md)

### token มีอายุนานเท่าใด?

ใช้ได้ครั้งเดียวและมีอายุประมาณ 120 วินาที แนะนำให้ส่งภายใน 60 วินาทีหลังจากได้รับ อายุของ token กำหนดโดย Google

### หากแก้ไม่สำเร็จจะถูกหักพอยต์หรือไม่?

ไม่ถูกหัก งานที่คืน `ERROR_CAPTCHA_UNSOLVABLE` หรือหมดเวลาจะคืนพอยต์โดยอัตโนมัติ ดู [การคิดราคาและการคืนพอยต์](https://docs.yescaptcha.com/th/getting-started/billing.md)

## บทแนะนำที่เกี่ยวข้อง

-   [การระบุประเภท CAPTCHA](https://docs.yescaptcha.com/th/guides/identify-captcha.md)
-   [การค้นหาพารามิเตอร์ของ reCAPTCHA](https://docs.yescaptcha.com/th/guides/find-recaptcha-parameters.md)
-   [การใช้ token เพื่อผ่าน reCAPTCHA](https://docs.yescaptcha.com/th/guides/submit-recaptcha-token.md)
-   [การคลิกรูปภาพ reCAPTCHA v2 ด้วย Selenium](https://docs.yescaptcha.com/th/guides/recaptcha-click-selenium.md)
