Tutorial

Debug API Call CAPTCHA dengan Charles Proxy

Ketika integrasi CAPTCHA Anda menghasilkan error yang tidak terduga, inspeksi traffic HTTP mentah mengungkap apa yang sebenarnya dikirim dan diterima. Charles Proxy berada di antara kode Anda dan CaptchaAI, memungkinkan Anda melihat setiap request, response, dan detail timing.


Setup

1. Instal Charles Proxy

Unduh dari charlesproxy.com. Tersedia di Windows, macOS, dan Linux.

2. Aktifkan SSL Proxy

CaptchaAI menggunakan HTTPS. Untuk mengintip traffic terenkripsi:

  1. ProxySSL Proxying SettingsAdd
  2. Host: ocr.captchaai.com, Port: 443
  3. HelpSSL ProxyingInstall Charles Root Certificate
  4. Percayai sertifikat di certificate store OS Anda

3. Konfigurasi kode untuk menggunakan Charles

Charles berjalan di localhost:8888 secara default.

Python:

import requests

proxies = {
    "http": "http://localhost:8888",
    "https": "http://localhost:8888",
}

# Nonaktifkan verifikasi SSL untuk Charles (development only)
resp = requests.post(
    "https://ocr.captchaai.com/in.php",
    data={"key": "YOUR_API_KEY", "method": "userrecaptcha", "json": "1"},
    proxies=proxies,
    verify=False,
)

Node.js:

const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');

const agent = new HttpsProxyAgent('http://localhost:8888');

const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: { key: 'YOUR_API_KEY', method: 'userrecaptcha', json: 1 },
  httpsAgent: agent,
});

Apa yang Harus Diperiksa

Submit Request (POST /in.php)

Di Charles, klik request ke /in.php. Periksa:

Tab Apa yang harus diverifikasi
Request → Headers Content-Type sudah benar
Request → Body Semua parameter wajib ada
Response → Body {"status":1,"request":"TASK_ID"} = sukses
Timing Durasi request (harus <1 detik)

Masalah umum yang terlihat di Charles:

  • Parameter method tidak adaERROR_BAD_PARAMETERS
  • Content-Type salah → Parameter tidak di-parse
  • googlekey kosongERROR_WRONG_GOOGLEKEY
  • JSON salah → Gunakan form data, bukan JSON body

Polling Request (GET /res.php)

Periksa polling request:

  • Param: key, action=get, id=TASK_ID
  • Response: CAPCHA_NOT_READY (lanjutkan polling) atau {"status":1,"request":"TOKEN"}
  • Timing: Setiap polling diikuti interval sleep Anda

Debug Masalah Umum

Masalah: ERROR_WRONG_GOOGLEKEY

Di Charles, lihat body request submit. Temukan field googlekey:

# Apa yang ditampilkan Charles:
key=YOUR_API_KEY&method=userrecaptcha&googlekey=&pageurl=https://example.com&json=1
                                      ^^^^^^^^ kosong!

Perbaikan: Ekstraksi sitekey gagal di upstream. Periksa kode ekstraksi Anda.

Masalah: Token ditolak oleh situs target

Bandingkan apa yang dikembalikan CaptchaAI vs apa yang Anda inject:

  1. Di Charles, temukan response /res.php dengan status: 1
  2. Salin token lengkap dari field request
  3. Temukan request berikutnya ke situs target
  4. Verifikasi token dalam form body sebagai g-recaptcha-response

Masalah: Request Timeout

Gunakan tampilan Charles Sequence untuk melihat timing:

POST /in.php     → 234ms ✓
GET  /res.php    → 189ms (CAPCHA_NOT_READY)
GET  /res.php    → 201ms (CAPCHA_NOT_READY)
GET  /res.php    → 195ms (CAPCHA_NOT_READY)
... 23 more ...
GET  /res.php    → 188ms (CAPCHA_NOT_READY)  ← tidak pernah resolve

Jika tidak pernah resolve: periksa apakah sitekey dan pageurl sudah benar.


Fitur Charles untuk Debug CAPTCHA

Ulangi Request

Klik kanan request apa pun → Repeat untuk mengirim ulang. Berguna untuk menguji polling request tanpa menjalankan ulang seluruh skrip.

Breakpoint

Set breakpoint pada /in.php untuk mengintip dan mengubah request sebelum dikirim:

  1. ProxyBreakpoints SettingsAdd
  2. Host: ocr.captchaai.com, Path: /in.php
  3. Centang Request
  4. Kode Anda sekarang dijeda sebelum dikirim — Anda dapat mengedit parameter

Map Local

Ganti response API dengan file lokal untuk pengujian:

  1. ToolsMap LocalAdd
  2. Petakan https://ocr.captchaai.com/res.php ke file JSON lokal
  3. Buat mock_response.json:
{"status": 1, "request": "mock_token_for_testing"}

Ini memungkinkan Anda menguji kode inject token tanpa menggunakan kredit API.

Throttling

Simulasikan koneksi lambat:

  1. ProxyThrottle Settings → Enable
  2. Set preset ke kecepatan 3G atau EDGE
  3. Uji apakah kode Anda menangani response lambat dan timeout dengan benar

Alternatif untuk Charles

Alat Platform HTTPS Biaya
Charles Proxy Win/Mac/Linux Perlu install sertifikat Berbayar (uji coba gratis)
mitmproxy Win/Mac/Linux Perlu install sertifikat Gratis
Fiddler Windows Dekripsi HTTPS bawaan Gratis
Proxyman macOS Setup HTTPS satu klik Freemium

Setup cepat mitmproxy

# Install
pip install mitmproxy

# Jalankan
mitmproxy --listen-port 8080

# Konfigurasi Python
proxies = {"https": "http://localhost:8080"}

Pemecahan Masalah

Masalah Penyebab Perbaikan
Error SSL di kode Sertifikat Charles tidak dipercaya Install root cert Charles; gunakan verify=False untuk development
Tidak ada request yang terlihat Kode tidak menggunakan proxy Set proxy di konfigurasi requests/axios
Response HTTPS berantakan SSL proxy tidak diaktifkan Tambahkan ocr.captchaai.com ke SSL Proxying Settings
Charles memperlambat request Breakpoint aktif Nonaktifkan breakpoint saat tidak digunakan

Pertanyaan Umum

Haruskah saya menggunakan Charles di produksi?

Tidak. Charles adalah alat development dan debugging. Gunakan structured logging dan monitoring untuk observabilitas produksi.

Apakah routing melalui Charles memengaruhi solve CAPTCHA?

Tidak. CaptchaAI tidak melihat Charles sebagai proxy — request Anda diteruskan secara transparan.


Debug dan Optimalkan Integrasi CaptchaAI Anda

Dapatkan API key Anda di captchaai.com.

Panduan Terkait

  • Structured Logging untuk Operasi CAPTCHA
  • Referensi Kode Error CaptchaAI
Komentar dinonaktifkan untuk artikel ini.