Tài Liệu Tham Khảo

Di chuyển từ AZCaptcha sang CaptchaAI: Hướng dẫn đầy đủ

AZCaptcha và CaptchaAI đều sử dụng định dạng API tương thích 2Captcha, giúp việc di chuyển trở nên đơn giản. Bạn hầu như sẽ thay đổi URL cơ sở và khóa API — định dạng yêu cầu vẫn giữ nguyên.

Ánh xạ điểm cuối

hành động AZCaptcha CaptchaAI
Gửi nhiệm vụ https://azcaptcha.com/in.php https://ocr.captchaai.com/in.php
Nhận kết quả https://azcaptcha.com/res.php https://ocr.captchaai.com/res.php
Kiểm tra số dư res.php?action=getbalance res.php?action=getbalance
Báo cáo sai res.php?action=reportbad res.php?action=reportbad

Khả năng tương thích thông số

Hầu hết các thông số đều giống hệt nhau. Sự khác biệt chính:

tham số AZCaptcha CaptchaAI Ghi chú
key Khóa API Khóa API Khóa khác — nhận khóa của bạn tại captchaai.com
method userrecaptcha userrecaptcha giống nhau
googlekey Khóa trang web Khóa trang web giống nhau
pageurl URL trang URL trang giống nhau
json 1 1 giống nhau
proxy user:pass@host:port user:pass@host:port Cùng định dạng
proxytype HTTP/1ZZ HTTP/1ZZ giống nhau

Các bước di chuyển

Bước 1: Nhận khóa API CaptchaAI

  1. Đăng ký tạicaptchaai.com
  2. Thêm tiền vào tài khoản của bạn
  3. Sao chép khóa API của bạn từ bảng điều khiển

Bước 2: Cập nhật mã của bạn

Python - Trước (AZCaptcha)

import requests

API_KEY = "your_azcaptcha_key"

def solve_recaptcha(sitekey, pageurl):
    # Submit
    resp = requests.post("https://azcaptcha.com/in.php", data={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1
    })
    data = resp.json()
    if data["status"] != 1:
        return {"error": data["request"]}

    captcha_id = data["request"]

    # Poll
    import time
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://azcaptcha.com/res.php", params={
            "key": API_KEY, "action": "get", "id": captcha_id, "json": 1
        }).json()
        if result["status"] == 1:
            return {"solution": result["request"]}
        if result["request"] != "CAPCHA_NOT_READY":
            return {"error": result["request"]}

    return {"error": "TIMEOUT"}

Python - Sau (CaptchaAI)

import os
import time
import requests

API_KEY = os.environ["CAPTCHAAI_API_KEY"]  # Changed: use env var

def solve_recaptcha(sitekey, pageurl):
    # Submit — only URL changed
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1
    })
    data = resp.json()
    if data.get("status") != 1:
        return {"error": data.get("request")}

    captcha_id = data["request"]

    # Poll — only URL changed
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": captcha_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return {"solution": result["request"]}
        if result.get("request") != "CAPCHA_NOT_READY":
            return {"error": result.get("request")}

    return {"error": "TIMEOUT"}

JavaScript — Trước (AZCaptcha)

const axios = require("axios");
const API_KEY = "your_azcaptcha_key";

async function solveRecaptcha(sitekey, pageurl) {
  const submit = await axios.post("https://azcaptcha.com/in.php", null, {
    params: { key: API_KEY, method: "userrecaptcha", googlekey: sitekey, pageurl, json: 1 },
  });
  if (submit.data.status !== 1) return { error: submit.data.request };

  const captchaId = submit.data.request;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const poll = await axios.get("https://azcaptcha.com/res.php", {
      params: { key: API_KEY, action: "get", id: captchaId, json: 1 },
    });
    if (poll.data.status === 1) return { solution: poll.data.request };
    if (poll.data.request !== "CAPCHA_NOT_READY") return { error: poll.data.request };
  }
  return { error: "TIMEOUT" };
}

JavaScript — Sau (CaptchaAI)

const axios = require("axios");
const API_KEY = process.env.CAPTCHAAI_API_KEY;  // Changed: env var

async function solveRecaptcha(sitekey, pageurl) {
  // Only URLs changed
  const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
    params: { key: API_KEY, method: "userrecaptcha", googlekey: sitekey, pageurl, json: 1 },
  });
  if (submit.data.status !== 1) return { error: submit.data.request };

  const captchaId = submit.data.request;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const poll = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: captchaId, json: 1 },
    });
    if (poll.data.status === 1) return { solution: poll.data.request };
    if (poll.data.request !== "CAPCHA_NOT_READY") return { error: poll.data.request };
  }
  return { error: "TIMEOUT" };
}

Bước 3: Tóm tắt nhà cung cấp

Để di chuyển an toàn hơn, hãy tạo trình bao bọc bất khả tri của nhà cung cấp:

import os
import time
import requests

class CaptchaProvider:
    def __init__(self, base_url, api_key):
        self.submit_url = f"{base_url}/in.php"
        self.result_url = f"{base_url}/res.php"
        self.api_key = api_key
        self.session = requests.Session()

    def solve(self, sitekey, pageurl, method="userrecaptcha"):
        resp = self.session.post(self.submit_url, data={
            "key": self.api_key,
            "method": method,
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": 1
        })
        data = resp.json()
        if data.get("status") != 1:
            return {"error": data.get("request")}

        captcha_id = data["request"]
        for _ in range(60):
            time.sleep(5)
            result = self.session.get(self.result_url, params={
                "key": self.api_key, "action": "get",
                "id": captcha_id, "json": 1
            }).json()
            if result.get("status") == 1:
                return {"solution": result["request"]}
            if result.get("request") != "CAPCHA_NOT_READY":
                return {"error": result.get("request")}
        return {"error": "TIMEOUT"}

# Switch by changing one line:
# provider = CaptchaProvider("https://azcaptcha.com", "old_key")
provider = CaptchaProvider(
    "https://ocr.captchaai.com",
    os.environ["CAPTCHAAI_API_KEY"]
)

Bước 4: Kiểm tra song song

Chạy đồng thời cả hai nhà cung cấp để so sánh:

def parallel_test(sitekey, pageurl, runs=10):
    azcaptcha = CaptchaProvider("https://azcaptcha.com", "old_key")
    captchaai = CaptchaProvider(
        "https://ocr.captchaai.com",
        os.environ["CAPTCHAAI_API_KEY"]
    )

    results = {"azcaptcha": [], "captchaai": []}

    for i in range(runs):
        start = time.time()
        az_result = azcaptcha.solve(sitekey, pageurl)
        results["azcaptcha"].append({
            "success": "solution" in az_result,
            "time": time.time() - start
        })

        start = time.time()
        cai_result = captchaai.solve(sitekey, pageurl)
        results["captchaai"].append({
            "success": "solution" in cai_result,
            "time": time.time() - start
        })

    for provider, data in results.items():
        successes = sum(1 for r in data if r["success"])
        avg_time = sum(r["time"] for r in data) / len(data)
        print(f"{provider}: {successes}/{runs} success, {avg_time:.1f}s avg")

Danh sách kiểm tra di chuyển

Bước Trạng thái
Tạo tài khoản CaptchaAI và nạp tiền vào tài khoản đó
Thay thế URL cơ sở trong tất cả các tệp
Cập nhật khóa API (sử dụng env var)
Chạy thử nghiệm song song (10+ giải)
So sánh tỷ lệ thành công
So sánh thời gian giải quyết
Cập nhật giám sát/alerting cho các điểm cuối mới
Chuyển đổi lưu lượng sản xuất
Giám sát trong 24 giờ
Ngừng hoạt động khóa AZCaptcha

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
ERROR_KEY_DOES_NOT_EXIST Khóa API sai Xác minh khóa API CaptchaAI từ bảng điều khiển
ERROR_ZERO_BALANCE Không có tiền trong tài khoản mới Nạp tiền tại captchaai.com
Mã lỗi khác nhau Sự khác biệt nhỏ về mã lỗi Mã lỗi bản đồ; hầu hết đều giống hệt nhau
Tỷ lệ giải quyết khác nhau Nhóm giải pháp khác nhau Chạy hơn 50 bài kiểm tra để so sánh có giá trị thống kê

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

CaptchaAI có phải là giải pháp thay thế sẵn có cho AZCaptcha không?

Gần như vậy. Cả hai đều sử dụng định dạng API tương thích 2Captcha. Thay đổi URL cơ sở và khóa API — các tham số và định dạng phản hồi giống nhau.

Cấu hình proxy hiện tại của tôi có hoạt động không?

Vâng. CaptchaAI sử dụng cùng tham số proxyproxytype. Không cần thay đổi để giải quyết dựa trên proxy.

Quá trình di chuyển mất bao lâu?

Đối với một cơ sở mã duy nhất, 15–30 phút. Hầu hết việc đó là cập nhật URL cơ sở bằng tính năng tìm kiếm và thay thế, đồng thời chạy thử nghiệm song song để xác minh.

Các bước tiếp theo

Chuyển sang giải pháp CAPTCHA nhanh hơn, đáng tin cậy hơn —lấy khóa API CaptchaAI của bạnvà di chuyển trong vài phút.

Hướng dẫn liên quan:

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