Resolusi DNS adalah overhead yang tidak terlihat pada setiap API call CAPTCHA. Setiap kali kode Anda memanggil ocr.captchaai.com, sistem mungkin melakukan lookup DNS — menambahkan 5–200 ms tergantung provider DNS, status cache, dan kondisi jaringan. Panduan ini menjelaskan kapan DNS menjadi bottleneck dan cara menghilangkannya.
Bagaimana DNS Mempengaruhi Solve CAPTCHA
Satu solve CAPTCHA melibatkan 5–7 HTTP request (1 submit + 4–6 polling). Tanpa cache DNS:
| Skenario | Lookup DNS | Latensi ditambahkan |
|---|---|---|
| Tanpa caching, DNS lambat (200ms/lookup) | 7 | 1.400 ms |
| Cache DNS OS (hanya call pertama) | 1 | 200 ms |
| Keep-alive connection (0 lookup baru) | 0 | 0 ms |
| Pre-resolve DNS + keep-alive | 0 | 0 ms |
Insight penting: Jika Anda sudah menggunakan HTTP keep-alive (persistent connection), DNS bukan masalah Anda — koneksi TCP yang sama menggunakan IP yang sudah di-resolve. DNS paling relevan ketika koneksi dibuat per request.
Kapan DNS Menjadi Masalah
Resolusi DNS menjadi bottleneck ketika:
- Koneksi baru per request — Tanpa
Session(Python) atau persistent agent (Node.js) - Container atau serverless cold start — Tidak ada DNS yang di-cache pada instance baru
- Provider DNS lambat — DNS ISP default tanpa cache lokal
- Solve paralel volume tinggi — Banyak worker mulai secara bersamaan
Python: Optimasi DNS
Verifikasi Perilaku DNS Saat Ini
import socket
import time
# Measure DNS resolution time
hostname = "ocr.captchaai.com"
start = time.time()
ip = socket.getaddrinfo(hostname, 443)
first_resolve = time.time() - start
start = time.time()
ip = socket.getaddrinfo(hostname, 443)
second_resolve = time.time() - start
print(f"First resolve: {first_resolve*1000:.1f}ms")
print(f"Second resolve: {second_resolve*1000:.1f}ms (OS cached)")
Pre-Resolve dan Cache
import os
import socket
import requests
from urllib3.util.connection import create_connection
API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")
# Pre-resolve the API hostname
CAPTCHAAI_IP = socket.getaddrinfo("ocr.captchaai.com", 443)[0][4][0]
print(f"Resolved ocr.captchaai.com to {CAPTCHAAI_IP}")
# Patch connection to use cached IP
DNS_CACHE = {"ocr.captchaai.com": CAPTCHAAI_IP}
class CachedHTTPAdapter(requests.adapters.HTTPAdapter):
def send(self, request, **kwargs):
return super().send(request, **kwargs)
# Use with Session for fastest resolution
session = requests.Session()
session.headers.update({"Connection": "keep-alive"})
# The session already maintains keep-alive, so DNS is resolved once
# For the first request, the OS cache handles subsequent lookups
resp = session.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "getbalance", "json": "1",
})
print(f"Balance: {resp.json()}")
Gunakan DNS Resolver yang Lebih Cepat
Konfigurasikan sistem atau aplikasi Anda untuk menggunakan DNS publik yang cepat:
# For systems where you control DNS configuration:
# /etc/resolv.conf (Linux) or system DNS settings
# Recommended: Cloudflare (1.1.1.1) or Google (8.8.8.8)
# In Python, you can also use dnspython for explicit resolution
import dns.resolver
resolver = dns.resolver.Resolver()
resolver.nameservers = ["1.1.1.1", "8.8.8.8"]
answers = resolver.resolve("ocr.captchaai.com", "A")
for answer in answers:
print(f"Resolved: {answer}")
JavaScript: Optimasi DNS
Ukur Resolusi DNS
const dns = require('dns');
const { performance } = require('perf_hooks');
const hostname = 'ocr.captchaai.com';
// First resolution
const start1 = performance.now();
dns.lookup(hostname, (err, address) => {
const time1 = performance.now() - start1;
console.log(`First resolve: ${time1.toFixed(1)}ms → ${address}`);
// Second resolution (OS cached)
const start2 = performance.now();
dns.lookup(hostname, (err2, address2) => {
const time2 = performance.now() - start2;
console.log(`Second resolve: ${time2.toFixed(1)}ms → ${address2}`);
});
});
Pre-Resolve dengan DNS Cache
const dns = require('dns');
const https = require('https');
const axios = require('axios');
const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';
// Pre-resolve and cache
let cachedIP = null;
async function preResolve() {
return new Promise((resolve, reject) => {
dns.lookup('ocr.captchaai.com', (err, address) => {
if (err) reject(err);
cachedIP = address;
console.log(`Cached IP: ${cachedIP}`);
resolve(address);
});
});
}
// Use keep-alive agent (DNS resolved once per connection)
const agent = new https.Agent({
keepAlive: true,
maxSockets: 20,
keepAliveMsecs: 60000,
});
const api = axios.create({
baseURL: 'https://ocr.captchaai.com',
httpsAgent: agent,
timeout: 30000,
});
(async () => {
await preResolve();
const resp = await api.get('/res.php', {
params: { key: API_KEY, action: 'getbalance', json: '1' },
});
console.log(`Balance: ${resp.data}`);
})();
Lingkungan Serverless dan Container
Di AWS Lambda, Google Cloud Functions, dan container Docker:
| Environment | Perilaku cache DNS | Rekomendasi |
|---|---|---|
| AWS Lambda | Di-cache dalam execution context, hilang saat cold start | Pre-resolve di handler init |
| Google Cloud Functions | Di-cache dalam instance | Pre-resolve di scope global |
| Docker | Menggunakan DNS host secara default | Konfigurasikan --dns 1.1.1.1 |
| Kubernetes | CoreDNS dengan cache yang dapat dikonfigurasi | Set ndots: 1 di DNS config pod |
Pemecahan Masalah
| Masalah | Penyebab | Perbaikan |
|---|---|---|
| Call API pertama lambat, sisanya cepat | Lookup DNS pada call pertama | Normal dengan cache OS; gunakan keep-alive |
| Semua call lambat (~100ms+ ditambahkan) | Tidak ada cache DNS, resolver lambat | Set DNS ke 1.1.1.1 atau 8.8.8.8 |
| Lonjakan latensi acak | TTL cache DNS kedaluwarsa | Naikkan TTL cache lokal atau pre-resolve |
| Container cold start lambat | Tidak ada DNS di-cache pada instance baru | Pre-resolve dalam kode inisialisasi |
Pertanyaan Umum
Apakah DNS benar-benar layak dioptimalkan untuk solve CAPTCHA?
Untuk sebagian besar setup dengan keep-alive, DNS di-resolve sekali dan digunakan kembali. Ini paling relevan untuk lingkungan serverless, cold start, atau saat membuat koneksi baru per request.
Provider DNS apa yang sebaiknya saya gunakan?
Cloudflare (1.1.1.1) dan Google (8.8.8.8) adalah DNS publik respons kompetitif. Keduanya resolve dalam <10 ms dari sebagian besar region.
Apakah CaptchaAI menggunakan beberapa alamat IP?
Ya. DNS mungkin mengembalikan IP yang berbeda di setiap lookup. Ini adalah load balancing yang normal. Keep-alive connection melekat pada IP yang di-resolve selama lifetime koneksi.
Langkah Selanjutnya
Hilangkan latensi DNS tersembunyi di pipeline Anda — dapatkan API key CaptchaAI Anda.
Panduan terkait:
- Keep-Alive Connection dan HTTP/2
- Benchmarking Waktu Solve
- Panduan Optimasi Latensi