Hướng Dẫn API

Phương thức xác thực proxy cho API CaptchaAI

Gặp lỗi ERROR_PROXY_NOT_AUTHORIZED, hoặc token bị trang đích từ chối dù CaptchaAI báo giải thành công? Nguyên nhân gần như luôn nằm ở cách bạn truyền proxyproxytype, không phải proxy.

CaptchaAI cho phép chuyển proxy riêng vào request giải, để token khớp đúng IP hệ thống đích nhìn thấy. Dưới đây là 4 phương thức xác thực proxy CaptchaAI hỗ trợ, kèm code chạy được ngay.


Khi nào thực sự cần truyền proxy

Loại CAPTCHA Có cần truyền proxy? Lý do
reCAPTCHA v2 tiêu chuẩn Thường không cần Token hoạt động từ mọi IP
reCAPTCHA v3 Tùy chọn Điểm số có thể phụ thuộc IP
Cloudflare Turnstile Nên dùng Token bị ràng buộc theo IP
Cloudflare Challenge Bắt buộc Thử thách gắn với IP từ đầu
Phiên giới hạn theo IP Bắt buộc Token chỉ hợp lệ với IP gốc

Định dạng tham số proxy theo từng loại

Loại proxy Định dạng Ví dụ
HTTP host:port:user:pass proxy.com:8080:user:pass
HTTPS host:port:user:pass proxy.com:8443:user:pass
SOCKS4 host:port:user:pass proxy.com:1080:user:pass
SOCKS5 host:port:user:pass proxy.com:1080:user:pass
Danh sách trắng IP host:port proxy.com:8080

Ví dụ thực tế: theo dõi giá trên sàn TMĐT

Một đội QA tại công ty outsourcing ở TP.HCM theo dõi giá niêm yết công khai trên Shopee và Tiki. Các trang này dùng Cloudflare Turnstile — token bị ràng buộc theo IP, nên proxy giải phải khớp proxy đã tải trang, nếu không token vẫn bị từ chối dù hợp lệ về API. Quy trình dưới áp dụng cho mọi thử thách gắn IP tương tự.


Bốn cách xác thực proxy với CaptchaAI

CaptchaAI nhận proxy qua hai tham số proxyproxytype, xếp từ phổ biến nhất đến ít dùng nhất.

1. Xác thực bằng tên đăng nhập/mật khẩu qua HTTP

import requests
import time

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"

def solve_with_http_proxy(site_url, sitekey, proxy_host, proxy_port,
                           proxy_user, proxy_pass):
    """Pass HTTP proxy to CaptchaAI for IP-matched solving."""
    proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "HTTP",
        "json": 1,
    })

    data = resp.json()
    if data["status"] != 1:
        raise Exception(f"Submit: {data['request']}")

    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY,
            "action": "get",
            "id": task_id,
            "json": 1,
        })
        data = resp.json()
        if data["request"] == "CAPCHA_NOT_READY":
            continue
        if data["status"] == 1:
            return data["request"]
        raise Exception(f"Solve: {data['request']}")

    raise TimeoutError("Timeout")

# Usage
token = solve_with_http_proxy(
    site_url="https://example.com/form",
    sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    proxy_host="proxy.example.com",
    proxy_port=8080,
    proxy_user="myuser",
    proxy_pass="mypass",
)

2. Xác thực bằng tên đăng nhập/mật khẩu qua SOCKS5

def solve_with_socks5_proxy(site_url, sitekey, proxy_host, proxy_port,
                             proxy_user, proxy_pass):
    """Pass SOCKS5 proxy to CaptchaAI."""
    proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "SOCKS5",
        "json": 1,
    })

    data = resp.json()
    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]

    raise TimeoutError("Timeout")

3. Danh sách trắng IP (không cần xác thực)

Một số nhà cung cấp proxy xác thực bằng danh sách IP trắng thay vì thông tin đăng nhập:

def solve_with_whitelisted_proxy(site_url, sitekey, proxy_host, proxy_port):
    """Proxy with IP whitelist — no username/password."""
    proxy_param = f"{proxy_host}:{proxy_port}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "HTTP",
        "json": 1,
    })

    data = resp.json()
    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]

    raise TimeoutError("Timeout")

Quan trọng: Với proxy danh sách trắng, bạn còn phải whitelist IP máy chủ của CaptchaAI — chính máy chủ CaptchaAI kết nối tới proxy, không phải trình duyệt của bạn.

4. Proxy HTTPS (CONNECT)

def solve_with_https_proxy(site_url, sitekey, proxy_host, proxy_port,
                            proxy_user, proxy_pass):
    proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "HTTPS",
        "json": 1,
    })

    # ... same polling logic ...

Node.js: cùng logic polling, khác cú pháp

const axios = require("axios");

const CAPTCHAAI_KEY = "YOUR_API_KEY";
const API = "https://ocr.captchaai.com";

async function solveWithProxy(siteUrl, sitekey, proxyConfig) {
  const params = {
    key: CAPTCHAAI_KEY,
    method: "userrecaptcha",
    googlekey: sitekey,
    pageurl: siteUrl,
    proxy: `${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
    proxytype: proxyConfig.type || "HTTP",
    json: 1,
  };

  const submit = await axios.post(`${API}/in.php`, null, { params });
  const taskId = submit.data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));

    const result = await axios.get(`${API}/res.php`, {
      params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
    });

    if (result.data.request === "CAPCHA_NOT_READY") continue;
    if (result.data.status === 1) return result.data.request;
  }

  throw new Error("Timeout");
}

// Usage
const token = await solveWithProxy(
  "https://example.com/form",
  "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
  {
    host: "proxy.example.com",
    port: 8080,
    user: "myuser",
    pass: "mypass",
    type: "HTTP", // HTTP, HTTPS, SOCKS4, or SOCKS5
  }
);

Định dạng proxy theo từng nhà cung cấp

Cú pháp chung: host:port:user:pass.

# Bright Data
proxy = "brd.superproxy.io:22225:brd-customer-ID-zone-residential:PASSWORD"
proxytype = "HTTP"

# Smartproxy
proxy = "gate.smartproxy.com:10001:spuser:sppassword"
proxytype = "HTTP"

# Oxylabs
proxy = "pr.oxylabs.io:7777:customer-USERNAME:PASSWORD"
proxytype = "HTTP"

Xử lý lỗi proxy thường gặp

  • ERROR_PROXY_NOT_AUTHORIZED — sai thông tin đăng nhập proxy hoặc IP chưa được đưa vào danh sách trắng. Kiểm tra lại thông tin xác thực; whitelist IP CaptchaAI.
  • ERROR_PROXY_CONNECTION_FAILED — CaptchaAI không kết nối được tới proxy. Kiểm tra proxy truy cập được từ ngoài.
  • Token bị từ chối — IP giải không khớp IP tải trang. Dùng chung một phiên cố định.
  • Giải chậm hơn — proxy thêm độ trễ. Chấp nhận hoặc đổi proxy nhanh hơn.
  • ERROR_BAD_PARAMETERS — sai định dạng proxy. Dùng đúng host:port:user:pass.

Câu hỏi thường gặp

CaptchaAI hỗ trợ những proxytype nào?

Bốn loại, cùng định dạng tham số proxy (host:port:user:pass), khai báo qua proxytype:

  • HTTP
  • HTTPS
  • SOCKS4
  • SOCKS5

Proxy của tôi bị lỗi giữa chừng thì làm sao?

Ba bước xử lý:

  • Bắt lỗi ERROR_PROXY_CONNECTION_FAILED từ response CaptchaAI
  • Chuyển sang proxy dự phòng trong danh sách của bạn
  • Gửi lại request thay vì để toàn bộ tác vụ thất bại

Proxy HTTP và SOCKS5 khác nhau thế nào khi dùng với CaptchaAI?

Cùng định dạng host:port:user:pass, chỉ khác giá trị proxytype. CaptchaAI xử lý cả hai như nhau — chọn loại nhà cung cấp của bạn đang hỗ trợ.

Vì sao token vẫn bị trang đích từ chối dù CaptchaAI báo giải thành công?

Gần như luôn do proxy giải không phải proxy đã tải trang — thường gặp khi dùng proxy luân phiên. Cố định một phiên cho cả hai bước để IP luôn khớp.

Truyền proxy làm chậm thời gian giải bao nhiêu?

Thường thêm khoảng 2–5 giây so với giải không proxy, vì CaptchaAI phải định tuyến qua proxy của bạn trước khi tải trang.

Hướng dẫn liên quan


Truyền đúng proxy vào từng request để token luôn khớp IP đã tải trang — lấy API key CaptchaAI tại đây.

Os comentários estão desativados para este artigo.