Token yang diselesaikan dari IP berbeda dengan IP yang memuat halaman sering ditolak situs target — paling terasa pada Cloudflare Turnstile dan Cloudflare Challenge yang mengikat token ke IP asal. Jalan keluarnya sederhana: teruskan proxy Anda sendiri ke API CaptchaAI, sehingga penyelesaian dijalankan dari IP proxy tersebut dan token yang kembali cocok dengan sesi Anda. Halaman ini merangkum setiap metode autentikasi proxy yang didukung — username:password lewat HTTP, HTTPS, dan SOCKS5, serta IP whitelist tanpa kredensial — lengkap dengan format parameter, contoh Python dan Node.js, dan cara membaca error yang paling sering muncul.
Kapan proxy perlu diteruskan ke CaptchaAI
Tidak semua CAPTCHA butuh proxy. Untuk sebagian besar reCAPTCHA v2, token berlaku dari IP mana pun, jadi menambah proxy hanya memperlambat tanpa manfaat. Patokannya: apakah token terikat ke IP atau tidak.
| Skenario | Perlu proxy? | Alasan |
|---|---|---|
| reCAPTCHA v2 standar | Umumnya tidak | Token berlaku dari IP mana pun |
| reCAPTCHA v3 | Opsional | Skor bisa dipengaruhi reputasi IP |
| Cloudflare Turnstile | Disarankan | Token terikat ke IP |
| Cloudflare Challenge | Wajib | Tantangan terikat ke IP asal |
| Sesi yang terikat IP | Wajib | Token divalidasi terhadap IP asal |
Prinsipnya, CaptchaAI menjalankan penyelesaian dari IP proxy yang Anda kirim, bukan dari IP server-nya sendiri. Dengan begitu, IP yang "terlihat" oleh situs saat token dibuat sama dengan IP yang nantinya mengirim token itu kembali. Kalau kedua IP berbeda, banyak sistem anti-bot menandainya sebagai tidak konsisten dan menolak token — itulah alasan proxy menjadi penting untuk tantangan yang terikat IP.
Referensi format parameter proxy
Sebelum masuk ke kode, ini rangkuman nilai proxy untuk setiap proxytype. Semua metode memakai pola yang sama; hanya proxytype dan ada-tidaknya kredensial yang berbeda.
proxytype |
Format proxy |
Contoh |
|---|---|---|
HTTP |
host:port:user:pass |
proxy.com:8080:user:pass |
HTTPS |
host:port:user:pass |
proxy.com:8443:user:pass |
SOCKS4 |
host:port:user:pass |
proxy.com:1080:user:pass |
SOCKS5 |
host:port:user:pass |
proxy.com:1080:user:pass |
| IP whitelist | host:port |
proxy.com:8080 |
Metode autentikasi proxy yang didukung
CaptchaAI menerima empat cara autentikasi proxy — pilih sesuai cara penyedia Anda memberi akses:
- username:password lewat HTTP — kredensial standar untuk mayoritas proxy.
- username:password lewat SOCKS5 — sama, tetapi di layer SOCKS.
- IP whitelist — tanpa kredensial; akses diberikan berdasarkan IP.
- HTTPS (CONNECT) — untuk proxy yang menuntut tunnel terenkripsi.
Pola API-nya sama untuk semuanya: kirim task ke in.php, simpan task ID, lalu polling res.php sampai token siap. Yang berbeda hanya nilai proxy dan proxytype.
1. Username:password lewat HTTP
Cara paling umum: penyedia memberi Anda host, port, username, dan password. Rangkai keempatnya dengan format host:port:user:pass lalu set proxytype ke HTTP.
import requests
import time
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
def solve_with_http_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
"""Pass HTTP proxy to CaptchaAI for IP-matched solving."""
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTP",
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = resp.json()
if data["request"] == "CAPCHA_NOT_READY":
continue
if data["status"] == 1:
return data["request"]
raise Exception(f"Solve: {data['request']}")
raise TimeoutError("Timeout")
# Usage
token = solve_with_http_proxy(
site_url="https://example.com/form",
sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
proxy_host="proxy.example.com",
proxy_port=8080,
proxy_user="myuser",
proxy_pass="mypass",
)
2. Username:password lewat SOCKS5
Formatnya identik; yang berubah hanya proxytype menjadi SOCKS5. Pakai ini bila proxy Anda beroperasi di layer SOCKS, misalnya untuk trafik non-HTTP atau kompatibilitas yang lebih luas.
def solve_with_socks5_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
"""Pass SOCKS5 proxy to CaptchaAI."""
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "SOCKS5",
"json": 1,
})
data = resp.json()
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
3. IP whitelist tanpa kredensial
Sebagian penyedia tidak memakai username:password, melainkan mengizinkan akses berdasarkan daftar IP. Di sini proxy cukup berisi host:port tanpa kredensial:
def solve_with_whitelisted_proxy(site_url, sitekey, proxy_host, proxy_port):
"""Proxy with IP whitelist — no username/password."""
proxy_param = f"{proxy_host}:{proxy_port}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTP",
"json": 1,
})
data = resp.json()
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
Penting: karena server CaptchaAI-lah yang menghubungi proxy Anda, IP server CaptchaAI juga harus masuk ke whitelist penyedia — bukan hanya IP mesin Anda. Kalau langkah ini terlewat, koneksi ditolak meski format sudah benar.
4. Proxy HTTPS (CONNECT)
Untuk proxy yang menuntut tunnel terenkripsi lewat metode HTTP CONNECT, set proxytype ke HTTPS. Logika submit dan polling-nya sama persis dengan contoh HTTP di atas.
def solve_with_https_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTPS",
"json": 1,
})
# ... same polling logic ...
Contoh integrasi Node.js
Pola yang sama berlaku di luar Python. Contoh Node.js berikut memakai Axios dan menerima objek konfigurasi proxy, sehingga tipe proxy (HTTP, HTTPS, SOCKS4, atau SOCKS5) bisa diganti tanpa menyentuh sisa kode.
const axios = require("axios");
const CAPTCHAAI_KEY = "YOUR_API_KEY";
const API = "https://ocr.captchaai.com";
async function solveWithProxy(siteUrl, sitekey, proxyConfig) {
const params = {
key: CAPTCHAAI_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: siteUrl,
proxy: `${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
proxytype: proxyConfig.type || "HTTP",
json: 1,
};
const submit = await axios.post(`${API}/in.php`, null, { params });
const taskId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get(`${API}/res.php`, {
params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
});
if (result.data.request === "CAPCHA_NOT_READY") continue;
if (result.data.status === 1) return result.data.request;
}
throw new Error("Timeout");
}
// Usage
const token = await solveWithProxy(
"https://example.com/form",
"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
{
host: "proxy.example.com",
port: 8080,
user: "myuser",
pass: "mypass",
type: "HTTP", // HTTP, HTTPS, SOCKS4, or SOCKS5
}
);
Format khusus per penyedia proxy
Setiap penyedia menyusun host dan kredensial dengan gaya masing-masing, tetapi semuanya tetap Anda petakan ke pola host:port:user:pass. Tiga contoh yang umum dipakai tim automation:
# Bright Data
proxy = "brd.superproxy.io:22225:brd-customer-ID-zone-residential:PASSWORD"
proxytype = "HTTP"
# Smartproxy
proxy = "gate.smartproxy.com:10001:spuser:sppassword"
proxytype = "HTTP"
# Oxylabs
proxy = "pr.oxylabs.io:7777:customer-USERNAME:PASSWORD"
proxytype = "HTTP"
Kalau penyedia Anda tidak ada di daftar ini, cukup ambil host, port, username, dan password dari dashboard mereka lalu susun dengan urutan yang sama.
Mengatasi error proxy yang umum
Sebagian besar kegagalan proxy muncul sebagai kode error yang jelas. Berikut yang paling sering dan cara menanganinya:
| Kode / gejala | Penyebab | Yang harus dilakukan |
|---|---|---|
ERROR_PROXY_NOT_AUTHORIZED |
Kredensial salah atau IP belum di-whitelist | Cek ulang username:password; masukkan IP server CaptchaAI ke whitelist |
ERROR_PROXY_CONNECTION_FAILED |
Proxy tidak bisa dijangkau CaptchaAI | Pastikan proxy dapat diakses dari IP luar |
| Token ditolak situs target | IP proxy tidak cocok dengan IP pemuat halaman | Pakai sesi sticky yang sama untuk memuat halaman dan menyelesaikan |
| Penyelesaian terasa lambat | Proxy menambah latensi | Terima tambahan waktu atau pindah ke proxy yang lebih cepat |
ERROR_BAD_PARAMETERS |
Format proxy salah | Gunakan format host:port:user:pass |
Latensi, biaya, dan kepatuhan
Tiga hal praktis yang perlu diingat saat memakai proxy sendiri:
- Latensi. Merutekan penyelesaian lewat proxy menambah satu hop jaringan, jadi waktu penyelesaian bisa naik beberapa detik — terutama bila proxy dan region deployment Anda berjauhan. Untuk tim yang men-deploy di AWS
ap-southeast-1(Singapura),ap-southeast-3(Jakarta), atau GCPasia-southeast2(Jakarta), pilih proxy dengan lokasi terdekat. - Biaya. CaptchaAI menagih per thread konkuren dengan solve tak terbatas per thread — paket BASIC ($15/bulan, 5 thread) sudah mencakup ini — sehingga meneruskan proxy tidak menambah biaya per CAPTCHA. Yang Anda bayar tetap kapasitas thread, bukan jumlah penyelesaian.
- Kepatuhan. Proses hanya data yang berhak Anda akses dan hindari data pribadi, sejalan dengan UU Pelindungan Data Pribadi (UU 27/2022). Ini bukan nasihat hukum, tetapi kebiasaan yang menghemat masalah di kemudian hari.
Pertanyaan umum
Jenis proxy apa saja yang bisa diteruskan ke CaptchaAI?
HTTP, HTTPS, SOCKS4, dan SOCKS5 — baik dengan username:password maupun IP whitelist. Anda tinggal mencocokkan nilai proxytype dengan jenis proxy yang Anda punya.
Kenapa IP server CaptchaAI juga perlu di-whitelist?
Karena penyelesaian dijalankan dari sisi CaptchaAI: server merekalah yang menyambung ke proxy Anda. Kalau penyedia proxy memakai autentikasi berbasis IP, IP CaptchaAI yang harus diizinkan, bukan hanya IP mesin lokal Anda.
Apakah meneruskan proxy menambah biaya solve?
Tidak. Penagihan CaptchaAI berbasis thread konkuren dengan solve tak terbatas per thread, jadi tidak ada biaya tambahan per CAPTCHA saat Anda memakai proxy sendiri. Yang bisa bertambah hanyalah waktu, bukan tagihan.
Kenapa token saya ditolak padahal solve berhasil?
Biasanya karena IP yang memuat halaman berbeda dengan IP yang dipakai saat penyelesaian. Gunakan sesi sticky yang sama untuk keduanya; kalau Anda mengirim proxy yang otomatis merotasi IP, CaptchaAI bisa menyelesaikan dari IP yang berbeda dari IP pemuat halaman.
Panduan terkait
- Setup proxy SOCKS5 dengan CaptchaAI
- Kualitas proxy dan pengaruhnya ke tingkat keberhasilan solve
- Integrasi Bright Data dengan CaptchaAI
Teruskan proxy Anda ke CaptchaAI agar penyelesaian CAPTCHA berjalan dari IP yang cocok — ambil API key Anda.