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:
- Proxy → SSL Proxying Settings → Add
- Host:
ocr.captchaai.com, Port:443 - Help → SSL Proxying → Install Charles Root Certificate
- 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
methodtidak ada →ERROR_BAD_PARAMETERS - Content-Type salah → Parameter tidak di-parse
googlekeykosong →ERROR_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:
- Di Charles, temukan response
/res.phpdenganstatus: 1 - Salin token lengkap dari field
request - Temukan request berikutnya ke situs target
- 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:
- Proxy → Breakpoints Settings → Add
- Host:
ocr.captchaai.com, Path:/in.php - Centang Request
- Kode Anda sekarang dijeda sebelum dikirim — Anda dapat mengedit parameter
Map Local
Ganti response API dengan file lokal untuk pengujian:
- Tools → Map Local → Add
- Petakan
https://ocr.captchaai.com/res.phpke file JSON lokal - 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:
- Proxy → Throttle Settings → Enable
- Set preset ke kecepatan 3G atau EDGE
- 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