Troubleshooting

ERROR_PROXY_NOT_AUTHORIZED: Perbaikan Autentikasi Proxy

Task API Anda balik dengan ERROR_PROXY_NOT_AUTHORIZED sebelum solver CaptchaAI sempat menyentuh reCAPTCHA atau Cloudflare Turnstile sama sekali — koneksi ke proxy Anda ditolak di titik paling awal, jadi masalahnya ada di proxy, bukan di CAPTCHA-nya. Panduan ini merangkum enam penyebab paling umum, satu studi kasus dari lapangan, dan kode Python siap pakai untuk mendiagnosis serta memperbaikinya.


Enam penyebab paling umum ERROR_PROXY_NOT_AUTHORIZED

  • Format proxy salah — pastikan Anda mengikuti pola type:host:port:user:pass persis; satu titik dua yang hilang saja sudah cukup membuat request ditolak.
  • Proxy Anda memerlukan whitelist IP — cek dashboard penyedia proxy apakah akses masih dibatasi per-IP, bukan per-kredensial.
  • Kredensial proxy sudah kedaluwarsa — uji koneksi proxy secara langsung dengan curl atau script Python sebelum menyalahkan CaptchaAI.
  • Tipe proxy yang Anda kirim salah — HTTP, HTTPS, SOCKS4, dan SOCKS5 punya handshake berbeda; mengirim SOCKS5 padahal proxy sebenarnya HTTP akan gagal total.
  • Server proxy sedang down — coba akses proxy dari mesin lain untuk memastikan masalahnya bukan di jaringan Anda sendiri.
  • Password mengandung karakter khusus yang tidak di-encode — karakter seperti : atau @ dalam password bisa merusak parsing string proxy; URL-encode dulu (lihat bagian di bawah).

Studi kasus: tim QA di Jakarta menambah thread setelah upgrade ke ADVANCE

Skenario ini sering terjadi pada tim QA otomatisasi berbasis Jakarta yang menjalankan pengujian checkout di banyak thread sekaligus. Setelah upgrade dari plan BASIC ($15/bulan, 5 thread) ke ADVANCE ($90/bulan, 50 thread) karena volume pengujian bertambah, mereka menambah worker baru di region AWS ap-southeast-1 (Singapura) supaya latensi ke target tetap rendah. Worker baru ini keluar lewat alamat IP publik baru — dan di situlah ERROR_PROXY_NOT_AUTHORIZED muncul, karena penyedia proxy mereka baru mem-whitelist IP lama saja.

Perbaikannya bukan mengganti seluruh konfigurasi proxy, cukup dua langkah: pertama, minta penyedia proxy menambahkan rentang IP AWS ap-southeast-1 yang baru ke daftar whitelist mereka; kedua, sebagai jalan pintas jangka pendek, alihkan autentikasi ke skema username/password (lihat bagian format proxy di bawah) supaya tidak bergantung pada whitelist IP sama sekali. Untuk tim yang hanya menguji data staging milik sendiri, prinsip yang sama juga selaras dengan UU Pelindungan Data Pribadi (UU 27/2022): proxy dan target pengujian harus tetap berada dalam kendali dan otorisasi tim sendiri.


Format proxy yang didukung CaptchaAI

Sebelum mengirim task apa pun ke in.php, pastikan string proxy Anda persis mengikuti format berikut:

proxytype: HTTP | HTTPS | SOCKS4 | SOCKS5
proxy: host:port:username:password

Begini bentuknya dalam request nyata untuk reCAPTCHA v2:

import requests

# Correct format
data = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "proxytype": "HTTP",
    "proxy": "192.168.1.1:8080:myuser:mypass",
    "json": 1,
}

resp = requests.post("https://ocr.captchaai.com/in.php", data=data)

Variasi penulisan proxy: dengan dan tanpa autentikasi

Kebanyakan proxy untuk CAPTCHA memerlukan autentikasi; format tanpa username/password nyaris tidak pernah dipakai di lapangan kecuali pada proxy dedicated milik Anda sendiri:

# With authentication
proxy = "192.168.1.1:8080:username:password"

# Without authentication (rare — most captcha proxies need auth)
proxy = "192.168.1.1:8080"

# SOCKS5
proxytype = "SOCKS5"
proxy = "192.168.1.1:1080:user:pass"

Validasi proxy sebelum mengirim task ke CaptchaAI

Jangan menunggu CaptchaAI menolak proxy Anda di production — validasi format sekaligus konektivitasnya lebih dulu dengan dua fungsi berikut:

import re
import requests


def validate_proxy(proxy_str, proxy_type="HTTP"):
    """Validate proxy format and connectivity."""
    # Check format
    parts = proxy_str.split(":")
    if len(parts) < 2:
        raise ValueError(f"Invalid proxy format: {proxy_str}")

    host = parts[0]
    port = parts[1]

    if not port.isdigit():
        raise ValueError(f"Invalid port: {port}")

    # Check proxy type
    valid_types = {"HTTP", "HTTPS", "SOCKS4", "SOCKS5"}
    if proxy_type not in valid_types:
        raise ValueError(f"Invalid proxy type: {proxy_type}")

    return True


def test_proxy(proxy_str, proxy_type="HTTP"):
    """Test if proxy is working."""
    parts = proxy_str.split(":")
    host = parts[0]
    port = parts[1]

    if len(parts) == 4:
        user, password = parts[2], parts[3]
        proxy_url = f"{proxy_type.lower()}://{user}:{password}@{host}:{port}"
    else:
        proxy_url = f"{proxy_type.lower()}://{host}:{port}"

    proxies = {"http": proxy_url, "https": proxy_url}

    try:
        resp = requests.get(
            "https://httpbin.org/ip",
            proxies=proxies,
            timeout=10,
        )
        print(f"Proxy working. IP: {resp.json()['origin']}")
        return True
    except Exception as e:
        print(f"Proxy failed: {e}")
        return False


# Test before using with CaptchaAI
proxy = "192.168.1.1:8080:user:pass"
if test_proxy(proxy, "HTTP"):
    print("Proxy is ready to use")

Kalau test_proxy() gagal di sini, task ke CaptchaAI juga akan gagal dengan error yang sama — perbaiki proxy dulu, baru kirim task.


Menangani karakter khusus dalam password proxy

Password yang mengandung :, @, atau # akan merusak parsing string host:port:username:password kalau tidak di-encode lebih dulu. urllib.parse.quote menyelesaikan ini dengan satu baris:

from urllib.parse import quote


def format_proxy(host, port, username, password):
    """Format proxy string, menangani karakter khusus."""
    # URL-encode password jika mengandung karakter khusus
    safe_password = quote(password, safe="")
    return f"{host}:{port}:{username}:{safe_password}"


# Password with special characters
proxy = format_proxy("192.168.1.1", "8080", "user", "p@ss:word!")

Deteksi otomatis tipe proxy (SOCKS vs HTTP)

Kalau Anda mewarisi daftar proxy tanpa keterangan protokolnya, jangan menebak — coba ketiga tipe secara terprogram:

def detect_proxy_type(host, port):
    """Try to detect which proxy protocol works."""
    import socket

    for proxy_type in ["HTTP", "SOCKS5", "SOCKS4"]:
        try:
            # Basic TCP connection test
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(5)
            result = sock.connect_ex((host, int(port)))
            sock.close()

            if result == 0:
                return proxy_type  # Port is open, try this type
        except Exception:
            continue

    return None

Fungsi ini hanya mengonfirmasi port terbuka, bukan protokol yang pasti benar — tetap uji ulang lewat test_proxy() di atas sebelum dipakai di production.


Masih ERROR_PROXY_NOT_AUTHORIZED? Tabel referensi cepat

Gejala Kemungkinan penyebab Perbaikan
Error padahal kredensial benar Proxy masih dibatasi whitelist IP Whitelist IP CaptchaAI di dashboard vendor, atau pindah ke autentikasi username/password
Berhasil dari laptop, gagal lewat CaptchaAI IP server CaptchaAI belum termasuk whitelist Gunakan autentikasi username/password sebagai gantinya
Proxy SOCKS selalu gagal proxytype yang dikirim salah Coba SOCKS5 lalu SOCKS4 sebelum menyerah
Autentikasi gagal tidak konsisten Proxy kena rate limit dari vendor Pindah ke proxy premium/dedicated dengan kuota lebih tinggi
Password berisi : merusak format Karakter khusus belum di-encode URL-encode password (lihat bagian di atas)
Error muncul mendadak setelah beberapa minggu lancar Vendor mengganti blok IP proxy tanpa pemberitahuan Hubungi support vendor untuk konfirmasi IP terbaru, lalu perbarui whitelist

Pertanyaan umum seputar error proxy CaptchaAI

Kenapa error muncul walau kredensial proxy saya sudah benar?

Penyebab paling sering adalah IP server CaptchaAI belum masuk whitelist di sisi vendor proxy Anda — kredensial user/password memang benar, tapi vendor tetap menolak koneksi berdasarkan alamat IP asal. Ganti ke autentikasi username/password murni, atau minta vendor menambahkan rentang IP CaptchaAI ke whitelist mereka.

Format string proxy SOCKS5 yang benar seperti apa?

Sama seperti HTTP/HTTPS: host:port:username:password, hanya proxytype-nya diganti SOCKS5. Kalau proxy Anda sebenarnya HTTP tapi dikirim sebagai SOCKS5 (atau sebaliknya), request akan gagal total karena kedua protokol punya handshake yang berbeda.

Apakah saya wajib pakai proxy supaya CaptchaAI bisa menyelesaikan CAPTCHA saya?

Tidak. Proxy bersifat opsional — banyak reCAPTCHA v2/v3 dan Cloudflare Turnstile bisa diselesaikan tanpa proxy sama sekali. Pakai proxy hanya kalau situs target memeriksa apakah IP yang menyelesaikan CAPTCHA sama dengan IP yang mengirim token.

Bagaimana cara memastikan IP CaptchaAI sudah masuk whitelist proxy saya?

Cek dokumentasi atau dashboard vendor proxy Anda untuk fitur whitelist berbasis IP, lalu bandingkan dengan IP outbound server yang mengirim request ke CaptchaAI. Kalau Anda deploy dari cloud (AWS, GCP), ingat bahwa IP publik bisa berubah setiap kali instance di-restart kecuali Anda memakai Elastic IP atau NAT gateway tetap.

Apakah lokasi server (region AWS/GCP) memengaruhi error ini?

Tidak secara langsung — region hanya memengaruhi latensi, bukan status autentikasi proxy. Tapi pindah region (misalnya dari ap-southeast-1 ke ap-southeast-3) mengganti alamat IP outbound Anda, dan itu bisa memicu ERROR_PROXY_NOT_AUTHORIZED kalau proxy Anda masih memakai whitelist IP lama.


Panduan terkait


Proxy sudah beres? Selesaikan CAPTCHA pertama Anda dengan CaptchaAI.

Komentar dinonaktifkan untuk artikel ini.