CAPSOLVER
Blog
Cara menyelesaikan Captcha AWS dengan PHP

Cara Menyelesaikan Tantangan AWS / Captcha dengan PHP: Panduan Lengkap

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

10-Dec-2025

TLDR (Terlalu Panjang; Tidak Membaca)

Panduan ini memberikan tutorial langkah demi langkah tentang cara melewati CAPTCHA dan halaman Challenge AWS WAF menggunakan PHP dan API CapSolver. Kami menjelaskan logika untuk mendeteksi respons CAPTCHA (HTTP 405) dan Challenge (HTTP 202), mengekstrak parameter yang diperlukan, dan menggunakan cookie aws-waf-token yang dihasilkan untuk mengakses sumber daya yang dilindungi.

Pendahuluan

Selamat datang di panduan lengkap ini di mana kita akan menjelajahi dunia CAPTCHA AWS dan bagaimana menerapkan solver PHP untuknya. Bagi pengembang dan penjelajah web, menghadapi CAPTCHA bisa menjadi hambatan signifikan, tetapi dengan alat yang tepat, ini menjadi tugas yang dapat dikelola.

Apa itu AWS WAF CAPTCHA dan Challenge?

AWS WAF (Web Application Firewall) adalah layanan keamanan yang membantu melindungi aplikasi web dari eksploit web umum. Layanan ini menawarkan dua tindakan utama untuk memverifikasi bahwa permintaan berasal dari pengguna manusia yang sah, bukan bot: CAPTCHA dan Challenge.

Ringkasan Aksi AWS WAF

Aksi Tujuan Kode Status HTTP Solusi yang Diperlukan
Challenge Menjalankan verifikasi latar belakang untuk memastikan sesi klien adalah browser standar. 202 Accepted Membutuhkan penyelesaian tantangan JavaScript untuk mendapatkan token.
CAPTCHA Meminta pengguna akhir untuk menyelesaikan teka-teki visual untuk membuktikan mereka manusia. 405 Method Not Allowed Membutuhkan penyelesaian CAPTCHA visual, yang melibatkan ekstraksi parameter spesifik dari halaman.

Setelah CAPTCHA atau Challenge berhasil diselesaikan, AWS WAF mengeluarkan token yang valid, yang dikembalikan sebagai nilai dari cookie bernama aws-waf-token. Cookie ini harus disertakan dalam permintaan berikutnya untuk melewati perlindungan WAF.

🔎 Menyelesaikan AWS Captcha / Challenge menggunakan PHP dan CapSolver

CapSolver menyediakan solusi API yang kuat untuk menangani Challenge latar belakang dan CAPTCHA visual yang ditampilkan oleh AWS WAF. Panduan ini fokus pada penggunaan perpustakaan cURL PHP untuk menerapkan logika yang diperlukan.

📕 Persyaratan

  • PHP (dengan ekstensi cURL diaktifkan)
  • cURL
  • Kunci API CapSolver (Anda dapat mendapatkannya dengan mendaftar di CapSolver)

🛠️ Langkah 1: Menyiapkan Lingkungan dan Fungsi Bantuan

Inti dari solusi kita melibatkan dua pemanggilan API utama ke CapSolver: createTask untuk mengirim CAPTCHA/Challenge dan getTaskResult untuk mengambil solusinya.

PHP Copy
<?php

// --- Konfigurasi ---
$PROXY = "http://username:password@host:port"; // OPSIONAL: Ganti dengan detail proxy Anda (misalnya, untuk AntiAwsWafTask)
$PAGE_URL = "https://norway-meetup.aws.wslab.no/";  // Ganti dengan URL target yang dilindungi AWS WAF
$CLIENT_KEY = "YourPayPerUsage";  // Ganti dengan kunci API CAPSOLVER Anda

/**
 * Mengirim tugas ke API CapSolver.
 * @param array $payload Payload tugas yang berisi tipe dan parameter.
 * @return array Respons API, termasuk taskId.
 */
function createTask($payload) {
    global $CLIENT_KEY;
    $ch = curl_init();
    echo("Membuat tugas...\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);
}

/**
 * Memeriksa API CapSolver untuk hasil tugas.
 * @param string $taskId ID tugas yang akan diperiksa.
 * @return array Respons API yang berisi solusi.
 */
function getTaskResult($taskId) {
    global $CLIENT_KEY;
    do {
        echo("Menunggu solusi...\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;
        }
        
        // Menangani kesalahan potensial dari getTaskResult
        if (isset($data['errorId']) && $data['errorId'] != 0) {
            echo("Kesalahan mengambil hasil tugas: " . $data['errorDescription'] . "\n");
            return null;
        }
        
    } while(true);
}

/**
 * Menyelesaikan Challenge atau Captcha AWS WAF menggunakan tipe tugas yang sesuai.
 * @param string $taskType Tipe tugas CapSolver (AntiAwsWafTask atau AwsCaptchaTask).
 * @param array $params Parameter yang diperlukan untuk tugas.
 * @return string|null Nilai cookie aws-waf-token atau null jika gagal.
 */
function solveAwsWaf($taskType, $params) {
    global $PAGE_URL, $PROXY;
    
    $payload = [
        'type' => $taskType,
        'websiteURL' => $PAGE_URL,
        'proxy' => $PROXY,
    ];
    
    // Gabungkan parameter spesifik untuk tugas
    $payload = array_merge($payload, $params);
    
    // Bersihkan nilai kosong untuk permintaan yang lebih bersih
    $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;
}

⚡ Langkah 2: Menerapkan Logika Deteksi dan Penyelesaian WAF

Logika utama melibatkan membuat permintaan awal ke halaman yang dilindungi dan memeriksa kode HTTP untuk menentukan apakah Challenge (202) atau CAPTCHA (405) diperlukan. Kami kemudian menggunakan ekspresi reguler untuk mengekstrak parameter yang diperlukan dari konten HTML respons.

PHP Copy
// --- Logika Eksekusi Utama ---

// 1. Permintaan awal ke halaman yang dilindungi
$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("Kode HTTP Awal: " . $httpCode . "\n");

if ($httpCode == 202) {
    // --- Penanganan Challenge (202) ---
    echo("Challenge terdeteksi (Kode HTTP 202). Mengekstrak parameter...\n");
    
    // Ekstrak 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("Kesalahan: awsChallengeJS tidak ditemukan untuk Challenge.\n");
    }

} elseif ($httpCode == 405) {
    // --- Penanganan CAPTCHA (405) ---
    echo("CAPTCHA terdeteksi (Kode HTTP 405). Mengekstrak parameter...\n");
    
    // Ekstrak parameter dari konten halaman
    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 // Opsional tetapi disarankan
        ];
        // Catatan: Tipe tugas untuk CAPTCHA visual biasanya masih AntiAwsWafTask, 
        // tetapi parameter yang dikirim menentukan jenis solusi pada sisi CapSolver.
        $cookie = solveAwsWaf("AntiAwsWafTask", $params); 
    } else {
        echo("Kesalahan: Parameter key, iv, atau context tidak ditemukan untuk CAPTCHA.\n");
    }
}

// 3. Gunakan token untuk mengakses sumber daya yang dilindungi
if ($cookie) {
    echo("Berhasil mendapatkan nilai cookie aws-waf-token. Membuat permintaan akhir...\n");
    
    $ch = curl_init($PAGE_URL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // Atur cookie aws-waf-token
    curl_setopt($ch, CURLOPT_COOKIE, "aws-waf-token=" . $cookie);
    
    $finalResponse = curl_exec($ch);
    curl_close($ch);
    
    echo "\n--- Konten Halaman Akhir ---\n";
    echo $finalResponse;
    echo "\n--------------------------\n";
} else {
    echo("Gagal menyelesaikan Challenge/CAPTCHA AWS WAF.\n");
}

?>

Catatan Optimasi Kode

Kode asli menggunakan fungsi terpisah (solveAwsChallenge, solveAwsCaptcha) dan penamaan parameter yang sedikit tidak konsisten (key, iv, context vs. awsKey, awsIv, awsContext). Kode yang dioptimalkan menyederhanakan ini menjadi satu fungsi solveAwsWaf, memastikan konsistensi dengan dokumentasi API CapSolver terbaru untuk menyelesaikan AWS WAF. Pendekatan ini lebih modular dan lebih mudah dipelihara.

Logika ini sangat efektif untuk tugas penjelajahan web dan otomatisasi. Untuk mereka yang bekerja dalam bahasa lain, CapSolver juga menyediakan panduan seperti "Cara Menyelesaikan AWS Captcha / Challenge dengan Python" [https://www.capsolver.com/blog/how-to-solve-aws-captcha-challenge-with-python] yang mengikuti pola API yang sama.

Kesimpulan

Mekanisme Challenge dan CAPTCHA AWS WAF adalah penghalang anti-bot yang efektif, tetapi bukan tidak terdapatkan. Dengan menerapkan logika deteksi dan penyelesaian yang kuat dalam PHP, pengembang dapat memperoleh nilai aws-waf-token yang diperlukan untuk melanjutkan tugas penjelajahan web atau otomatisasi tanpa gangguan. Kuncinya adalah mengidentifikasi tindakan WAF yang tepat melalui kode status HTTP dan mengekstrak parameter yang diperlukan dari sumber halaman secara akurat.

Poin-Poin Utama

  • Aksi AWS WAF: AWS WAF menggunakan Challenge latar belakang (Kode HTTP 202) atau CAPTCHA visual (Kode HTTP 405) untuk memblokir bot.
  • Tujuan: Tujuan akhir adalah memperoleh nilai cookie aws-waf-token.
  • API CapSolver: Tipe tugas AntiAwsWafTask menangani penyelesaian Challenge dan CAPTCHA, dengan parameter yang diperlukan menentukan solusi spesifik.
  • Implementasi PHP: Perpustakaan cURL PHP digunakan untuk permintaan, dan preg_match penting untuk mengekstrak parameter dinamis seperti awsChallengeJS, awsKey, awsIv, dan awsContext dari sumber HTML.
  • Keandalan: Untuk otomatisasi yang stabil dan berkapasitas tinggi, mengintegrasikan solver khusus seperti CapSolver sangat penting, seperti yang dijelaskan dalam sumber daya seperti AWS WAF CAPTCHA Solver: Token & Image Solution untuk Penjelajah

FAQ: Pertanyaan yang Sering Diajukan

Q1: Mengapa saya perlu memeriksa kode status HTTP (202 atau 405)?

A: Kode status HTTP adalah indikator yang paling andal untuk jenis tindakan WAF yang diperlukan. Kode status 202 Accepted menunjukkan bahwa Challenge aktif, yang membutuhkan parameter minimal. Kode status 405 Method Not Allowed menunjukkan bahwa CAPTCHA visual aktif, yang membutuhkan parameter spesifik (key, iv, context) yang diekstrak dari variabel JavaScript halaman.

Q2: Apa perbedaan antara AntiAwsWafTask dan AntiAwsWafTaskProxyLess?

A: Kedua tipe tugas ini dirancang untuk menyelesaikan tantangan AWS WAF. Perbedaan utamanya adalah kebutuhan proxy. AntiAwsWafTask memerlukan Anda untuk menyediakan proxy sendiri dalam payload permintaan. AntiAwsWafTaskProxyLess tidak memerlukan proxy, karena CapSolver menangani penggunaan proxy secara internal. Menggunakan proxy sering direkomendasikan untuk penjelajahan web skala besar untuk menjaga anonimitas dan menghindari pemblokiran IP.

Q3: Skrip saya gagal menemukan parameter key, iv, atau context. Apa yang harus saya lakukan?

A: Parameter ini dibuat secara dinamis dan disisipkan dalam sumber HTML, biasanya dalam tag <script> atau bidang input tersembunyi. Jika preg_match gagal, kemungkinan besar karena perubahan dalam implementasi WAF situs target. Anda harus memeriksa sumber HTML terbaru dari halaman yang diblokir untuk memperbarui ekspresi reguler Anda.

Q4: Bisakah saya menyelesaikan AWS WAF tanpa menggunakan layanan pihak ketiga?

A: Menyelesaikan tantangan AWS WAF secara manual sangat sulit dan tidak praktis untuk otomatisasi. Tantangan memerlukan eksekusi JavaScript yang kompleks dan terenkripsi, sedangkan CAPTCHA memerlukan teka-teki pengenalan gambar. Layanan pihak ketiga seperti CapSolver menggunakan AI canggih dan infrastruktur skala besar untuk menyelesaikan tantangan ini secara real-time, membuat otomatisasi mungkin. Membangun solver internal untuk setiap jenis CAPTCHA umumnya tidak efektif secara biaya atau andal.

A: Periode validitas cookie aws-waf-token ditentukan oleh konfigurasi AWS WAF dari situs web yang dilindungi, tetapi biasanya sekitar 10-30 menit. Setelah token kedaluwarsa, Anda perlu mengulangi proses penyelesaian (permintaan awal, deteksi, dan pengiriman tugas) untuk memperoleh token baru.

Pernyataan Kepatuhan: Informasi yang diberikan di blog ini hanya untuk tujuan informasi. CapSolver berkomitmen untuk mematuhi semua hukum dan peraturan yang berlaku. Penggunaan jaringan CapSolver untuk kegiatan ilegal, penipuan, atau penyalahgunaan sangat dilarang dan akan diselidiki. Solusi penyelesaian captcha kami meningkatkan pengalaman pengguna sambil memastikan kepatuhan 100% dalam membantu menyelesaikan kesulitan captcha selama pengambilan data publik. Kami mendorong penggunaan layanan kami secara bertanggung jawab. Untuk informasi lebih lanjut, silakan kunjungi Syarat Layanan dan Kebijakan Privasi.

Lebih lanjut