Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
Blog/The Other CAPTCHA/Cách giải AWS Captcha / Thách thức bằng PHP: Hướng dẫn toàn diện
Sep14, 2023

Cách giải AWS Captcha / Thách thức bằng PHP: Hướng dẫn toàn diện

Anh Tuan

Anh Tuan

Data Science Expert

Tóm tắt (Quá dài; Không đọc)

Hướng dẫn này cung cấp một hướng dẫn chi tiết từng bước về cách vượt qua CAPTCHA và trang thử thách của AWS WAF bằng PHP và API CapSolver. Chúng tôi mô tả logic để phát hiện cả CAPTCHA (HTTP 405) và Thử thách (HTTP 202), trích xuất các tham số cần thiết và sử dụng cookie aws-waf-token để truy cập tài nguyên được bảo vệ.

Giới thiệu

Chào mừng bạn đến với hướng dẫn toàn diện này, nơi chúng ta sẽ khám phá thế giới của AWS CAPTCHA và cách triển khai trình giải CAPTCHA bằng PHP. Đối với các nhà phát triển và người quét web, việc gặp phải CAPTCHA có thể là một rào cản lớn, nhưng với các công cụ đúng đắn, nó trở thành một nhiệm vụ có thể quản lý được.

AWS WAF CAPTCHA và Thử thách là gì?

AWS WAF (Web Application Firewall) là một dịch vụ bảo mật giúp bảo vệ các ứng dụng web khỏi các cuộc tấn công phổ biến. Nó cung cấp hai hành động chính để xác minh rằng yêu cầu đến từ người dùng hợp lệ thay vì bot: CAPTCHA và Thử thách.

Tổng quan về các hành động của AWS WAF

Hành động Mục đích Mã trạng thái HTTP Giải pháp cần thiết
Thử thách Chạy kiểm tra nền để xác minh phiên bản khách hàng là trình duyệt tiêu chuẩn. 202 Accepted Yêu cầu giải một thử thách JavaScript để nhận token.
CAPTCHA Yêu cầu người dùng cuối giải một trò chơi hình ảnh để chứng minh họ là người thật. 405 Method Not Allowed Yêu cầu giải CAPTCHA hình ảnh, bao gồm việc trích xuất các tham số cụ thể từ trang.

Sau khi CAPTCHA hoặc Thử thách được giải thành công, AWS WAF sẽ cấp một token hợp lệ, được trả về dưới dạng giá trị của cookie tên là aws-waf-token. Cookie này phải được bao gồm trong các yêu cầu tiếp theo để vượt qua bảo vệ WAF.

🔎 Giải quyết AWS Captcha / Thử thách bằng PHP và CapSolver

CapSolver cung cấp giải pháp API mạnh mẽ để xử lý cả Thử thách nền và CAPTCHA hình ảnh do AWS WAF đưa ra. Hướng dẫn này tập trung vào việc sử dụng thư viện cURL của PHP để triển khai logic cần thiết.

📕 Yêu cầu

  • PHP (với phần mở rộng cURL được kích hoạt)
  • cURL
  • Mã API CapSolver (Bạn có thể nhận được bằng cách đăng ký tại CapSolver)

🛠️ Bước 1: Thiết lập môi trường và hàm trợ giúp

Nội dung chính của giải pháp của chúng tôi bao gồm hai cuộc gọi API chính đến CapSolver: createTask để gửi CAPTCHA/Thử thách và getTaskResult để nhận kết quả.

PHP Copy
<?php

// --- Cấu hình ---
$PROXY = "http://username:password@host:port"; // TÙY CHỌN: Thay thế bằng thông tin proxy của bạn (ví dụ, cho AntiAwsWafTask)
$PAGE_URL = "https://norway-meetup.aws.wslab.no/";  // Thay thế bằng URL đích được bảo vệ bởi AWS WAF
$CLIENT_KEY = "YourPayPerUsage";  // Thay thế bằng khóa API CAPSOLVER của bạn

/**
 * Gửi một nhiệm vụ đến API CapSolver.
 * @param array $payload Thông tin nhiệm vụ chứa loại và tham số.
 * @return array Trả về phản hồi API, bao gồm taskId.
 */
function createTask($payload) {
    global $CLIENT_KEY;
    $ch = curl_init();
    echo("Tạo nhiệm vụ...\n");
    curl_setopt($ch, CURLOPT_URL, 'https://api.capsolver.com/createTask');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['clientKey' => $CLIENT_KEY, 'task' => $payload]));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}

/**
 * Kiểm tra định kỳ API CapSolver để nhận kết quả nhiệm vụ.
 * @param string $taskId ID của nhiệm vụ cần kiểm tra.
 * @return array Trả về phản hồi API chứa giải pháp.
 */
function getTaskResult($taskId) {
    global $CLIENT_KEY;
    do {
        echo("Đợi giải pháp...\n");
        sleep(1);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://api.capsolver.com/getTaskResult');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['clientKey' => $CLIENT_KEY, 'taskId' => $taskId]));
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        $response = curl_exec($ch);
        curl_close($ch);
        $data = json_decode($response, true);
        
        if (isset($data['status']) && $data['status'] == "ready") {
            return $data;
        }
        
        // Xử lý lỗi tiềm ẩn từ getTaskResult
        if (isset($data['errorId']) && $data['errorId'] != 0) {
            echo("Lỗi nhận kết quả nhiệm vụ: " . $data['errorDescription'] . "\n");
            return null;
        }
        
    } while(true);
}

/**
 * Giải AWS WAF Thử thách hoặc CAPTCHA bằng loại nhiệm vụ phù hợp.
 * @param string $taskType Loại nhiệm vụ CapSolver (AntiAwsWafTask hoặc AwsCaptchaTask).
 * @param array $params Các tham số cần thiết cho nhiệm vụ.
 * @return string|null Giá trị cookie aws-waf-token hoặc null nếu thất bại.
 */
function solveAwsWaf($taskType, $params) {
    global $PAGE_URL, $PROXY;
    
    $payload = [
        'type' => $taskType,
        'websiteURL' => $PAGE_URL,
        'proxy' => $PROXY,
    ];
    
    // Gộp các tham số cụ thể cho nhiệm vụ
    $payload = array_merge($payload, $params);
    
    // Làm sạch các giá trị trống để có yêu cầu sạch hơn
    $payload = array_filter($payload, function($value) {
        return $value !== "" && $value !== null;
    });

    $taskData = createTask($payload);
    
    if (isset($taskData['taskId'])) {
        $result = getTaskResult($taskData['taskId']);
        if ($result && isset($result['solution']['cookie'])) {
            return $result['solution']['cookie'];
        }
    }
    
    return null;
}

⚡ Bước 2: Triển khai logic phát hiện và giải WAF

Logic chính bao gồm việc gửi yêu cầu ban đầu đến trang được bảo vệ và kiểm tra mã trạng thái HTTP để xác định xem có cần Thử thách (202) hay CAPTCHA (405) hay không. Sau đó, chúng tôi sử dụng biểu thức chính quy để trích xuất các tham số cần thiết từ nội dung phản hồi HTML.

PHP Copy
// --- Logic Thực thi Chính ---

// 1. Yêu cầu ban đầu đến trang được bảo vệ
$ch = curl_init($PAGE_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$cookie = null;

echo("Mã HTTP ban đầu: " . $httpCode . "\n");

if ($httpCode == 202) {
    // --- Xử lý Thử thách (202) ---
    echo("Phát hiện Thử thách (HTTP 202). Trích xuất tham số...\n");
    
    // Trích xuất URL challenge.js
    preg_match('/<script src="([^"]*token.awswaf.com[^"]*)"/', $response, $matches);
    $awsChallengeJS = $matches[1] ?? null;
    
    if ($awsChallengeJS) {
        $params = ['awsChallengeJS' => $awsChallengeJS];
        $cookie = solveAwsWaf("AntiAwsWafTask", $params);
    } else {
        echo("Lỗi: awsChallengeJS không được tìm thấy cho Thử thách.\n");
    }

} elseif ($httpCode == 405) {
    // --- Xử lý CAPTCHA (405) ---
    echo("Phát hiện CAPTCHA (HTTP 405). Trích xuất tham số...\n");
    
    // Trích xuất tham số từ nội dung trang
    preg_match('/<script src="([^"]*token.awswaf.com[^"]*)"/', $response, $matches);
    $awsChallengeJS = $matches[1] ?? null;
    
    preg_match('/"key":"(.*?)"/', $response, $matches);
    $awsKey = $matches[1] ?? null;
    
    preg_match('/"iv":"(.*?)"/', $response, $matches);
    $awsIv = $matches[1] ?? null;
    
    preg_match('/"context":"(.*?)"/', $response, $matches);
    $awsContext = $matches[1] ?? null;
    
    if ($awsKey && $awsIv && $awsContext) {
        $params = [
            'awsKey' => $awsKey,
            'awsIv' => $awsIv,
            'awsContext' => $awsContext,
            'awsChallengeJS' => $awsChallengeJS // Tùy chọn nhưng được khuyến khích
        ];
        // Lưu ý: Loại nhiệm vụ cho CAPTCHA hình ảnh thường vẫn là AntiAwsWafTask, 
        // nhưng các tham số được truyền sẽ xác định loại giải pháp trên phía CapSolver.
        $cookie = solveAwsWaf("AntiAwsWafTask", $params); 
    } else {
        echo("Lỗi: Các tham số key, IV hoặc context không được tìm thấy cho CAPTCHA.\n");
    }
}

// 3. Sử dụng token để truy cập tài nguyên được bảo vệ
if ($cookie) {
    echo("Đã nhận được aws-waf-token thành công. Gửi yêu cầu cuối cùng...\n");
    
    $ch = curl_init($PAGE_URL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // Thiết lập cookie aws-waf-token
    curl_setopt($ch, CURLOPT_COOKIE, "aws-waf-token=" . $cookie);
    
    $finalResponse = curl_exec($ch);
    curl_close($ch);
    
    echo "\n--- Nội dung Trang Cuối ---\n";
    echo $finalResponse;
    echo "\n--------------------------\n";
} else {
    echo("Không thể giải quyết Thử thách/CAPTCHA của AWS WAF.\n");
}

?>

Ghi chú Tối ưu Mã

Mã gốc sử dụng các hàm riêng biệt (solveAwsChallenge, solveAwsCaptcha) và tên tham số không nhất quán ( key, iv, context so với awsKey, awsIv, awsContext). Mã tối ưu hóa đã đơn giản hóa thành một hàm solveAwsWaf, đảm bảo nhất quán với tài liệu API CapSolver mới nhất về việc giải AWS WAF. Cách tiếp cận này có tính modular cao và dễ bảo trì.

Logic này rất hiệu quả cho các nhiệm vụ quét web và tự động hóa. Đối với những người làm việc bằng ngôn ngữ khác, CapSolver cũng cung cấp các hướng dẫn như "Cách giải AWS Captcha / Thử thách bằng Python" [https://www.capsolver.com/blog/how-to-solve-aws-captcha-challenge-with-python] tuân theo mô hình API tương tự.

Kết luận

Các cơ chế Thử thách và CAPTCHA của AWS WAF là các biện pháp chống bot hiệu quả, nhưng chúng không phải là không thể vượt qua. Bằng cách triển khai logic phát hiện và giải quyết mạnh mẽ trong PHP, tận dụng sức mạnh của API CapSolver, các nhà phát triển có thể đáng tin cậy nhận được aws-waf-token cần thiết để tiếp tục các nhiệm vụ quét web hoặc tự động hóa mà không bị gián đoạn. Chìa khóa nằm ở việc xác định chính xác hành động WAF thông qua mã trạng thái HTTP và trích xuất chính xác các tham số cần thiết từ nguồn trang.

Những điểm chính

  • Hành động của AWS WAF: AWS WAF sử dụng Thử thách thầm lặng (HTTP 202) hoặc CAPTCHA hình ảnh (HTTP 405) để chặn bot.
  • Mục tiêu: Mục tiêu cuối cùng là nhận được giá trị cookie aws-waf-token.
  • API CapSolver: Loại nhiệm vụ AntiAwsWafTask xử lý cả việc giải Thử thách và CAPTCHA, với các tham số cần thiết xác định giải pháp cụ thể.
  • Triển khai PHP: PHP sử dụng cURL cho các yêu cầu, và preg_match là thiết yếu để trích xuất các tham số động như awsChallengeJS, awsKey, awsIv và awsContext từ nguồn HTML.
  • Tính tin cậy: Đối với tự động hóa ổn định, khối lượng lớn, việc tích hợp trình giải chuyên dụng như CapSolver là cần thiết, như được chi tiết trong các tài nguyên như AWS WAF CAPTCHA Solver: Token & Image Solution for Scraper

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

Câu hỏi 1: Tại sao tôi cần kiểm tra mã trạng thái HTTP (202 hoặc 405)?

Trả lời: Mã trạng thái HTTP là chỉ báo đáng tin cậy nhất về loại hành động WAF cần thiết. Mã trạng thái 202 Accepted cho biết thử thách đang hoạt động, yêu cầu ít tham số hơn. Mã trạng thái 405 Method Not Allowed cho biết CAPTCHA hình ảnh đang hoạt động, yêu cầu các tham số cụ thể hơn (key, iv, context) được trích xuất từ các biến JavaScript trên trang.

Câu hỏi 2: Sự khác biệt giữa AntiAwsWafTask và AntiAwsWafTaskProxyLess là gì?

Trả lời: Cả hai loại nhiệm vụ đều được thiết kế để giải các thử thách AWS WAF. Sự khác biệt chính là yêu cầu proxy. AntiAwsWafTask yêu cầu bạn cung cấp proxy riêng trong payload yêu cầu. AntiAwsWafTaskProxyLess không yêu cầu proxy, vì CapSolver xử lý việc sử dụng proxy bên trong. Sử dụng proxy thường được khuyến khích cho quét web quy mô lớn để duy trì tính ẩn danh và tránh bị cấm IP.

Câu hỏi 3: Script của tôi không thể tìm thấy các tham số key, iv hoặc context. Tôi nên làm gì?

Trả lời: Các tham số này được tạo động và nhúng trong nguồn HTML, thường nằm trong thẻ <script> hoặc trường ẩn. Nếu preg_match thất bại, có thể do thay đổi trong triển khai WAF của trang đích. Bạn nên kiểm tra nguồn HTML mới nhất của trang bị chặn để cập nhật biểu thức chính quy.

Câu hỏi 4: Tôi có thể giải AWS WAF mà không sử dụng dịch vụ bên thứ ba không?

Trả lời: Giải các thử thách AWS WAF một cách thủ công là rất khó và không thực tế cho tự động hóa. Hành động Thử thách yêu cầu thực thi JavaScript phức tạp, và hành động CAPTCHA yêu cầu giải các bài toán nhận diện hình ảnh. Các dịch vụ bên thứ ba như CapSolver sử dụng AI tiên tiến và cơ sở hạ tầng quy mô lớn để giải các thử thách này theo thời gian thực, làm cho tự động hóa khả thi. Việc xây dựng trình giải nội bộ cho mọi loại CAPTCHA thường không hiệu quả về chi phí hoặc đáng tin cậy.

Câu hỏi 5: Token aws-waf-token có hiệu lực trong bao lâu?

Trả lời: Thời gian hiệu lực của token aws-waf-token được xác định bởi cấu hình AWS WAF của trang được bảo vệ, nhưng thường là khoảng 10-30 phút. Khi token hết hạn, bạn sẽ cần lặp lại quy trình giải (yêu cầu ban đầu, phát hiện và gửi nhiệm vụ) để nhận token mới.

Xem thêm

The Other CAPTCHAApr 03, 2026

Cách xử lý các rào cản khi quét web: Các phương pháp thực tế hiệu quả

Học cách xử lý các rào cản khi trích xuất dữ liệu từ web một cách hiệu quả. Khám phá các phương pháp thực tế, những hiểu biết kỹ thuật về phát hiện bot và các giải pháp đáng tin cậy để trích xuất dữ liệu.

Ethan Collins
Ethan Collins
The Other CAPTCHAApr 03, 2026

Giải Thích Thời Gian Phản Hồi API Giải CAPTCHA: Yếu Tố Tốc Độ & Hiệu Suất

Hiểu rõ thời gian phản hồi của API giải CAPTCHA, tác động của nó đến tự động hóa và các yếu tố chính ảnh hưởng đến tốc độ. Học cách tối ưu hóa hiệu suất và tận dụng các giải pháp hiệu quả như CapSolver để giải CAPTCHA nhanh chóng.

Nội dung

Emma Foster
Emma Foster
The Other CAPTCHAApr 02, 2026

API Giải Quyết CAPTCHA Là Gì? Cách Hoạt Động Và Khi Nào Nên Sử Dụng

Hãy học cách CAPTCHA giải API là gì, cách hoạt động của nó và khi nào nên sử dụng nó cho tự động hóa. Khám phá lợi ích của việc giải CAPTCHA dựa trên AI cho việc quét web.

Sora Fujimoto
Sora Fujimoto
The Other CAPTCHAFeb 27, 2026

Thành thạo Thách thức CAPTCHA trong Việc Thu thập Dữ liệu Việc làm (Hướng dẫn 2026)

Một cẩm nang toàn diện để hiểu và vượt qua thách thức CAPTCHA trong trích xuất dữ liệu công việc. Học cách xử lý reCAPTCHA và những rào cản khác với các mẹo chuyên gia và ví dụ mã nguồn của chúng tôi.

Ethan Collins
Ethan Collins