A resolução DNS é um imposto invisível em cada chamada da API CAPTCHA. Cada vez que seu código chama ocr.captchaai.com, o sistema pode realizar uma pesquisa de DNS – adicionando 5–200 ms dependendo do seu provedor de DNS, estado do cache e condições da rede. Este guia explica quando o DNS se torna um gargalo e como eliminá-lo.
Como o DNS afeta a resolução de CAPTCHA
Uma única solução CAPTCHA envolve de 5 a 7 solicitações HTTP (1 envio + 4 a 6 enquetes). Sem cache DNS:
| Cenário | Pesquisas de DNS | Latência adicionada |
|---|---|---|
| Sem cache, DNS lento (200 ms cada) | 7 | 1.400ms |
| Cache DNS no nível do sistema operacional (somente na primeira chamada) | 1 | 200ms |
| Conexão keep-alive (0 novas pesquisas) | 0 | 0ms |
| validação antecipada em staging de DNS + keep-alive | 0 | 0ms |
Informações importantes: Se você já estiver usando HTTP keep-alive (conexões persistentes), o DNS não é problema seu — a mesma conexão TCP reutiliza o IP resolvido. O DNS é mais importante quando as conexões são criadas por solicitação.
Quando o DNS é importante
A resolução DNS se torna um gargalo quando:
- Novas conexões por solicitação — Sem
Session(Python) ou agente keep-alive (Node.js) - Inícios a frio de contêiner ou sem servidor — Sem DNS armazenado em cache em instâncias recentes
- Provedores de DNS lentos — DNS padrão do ISP sem cache local
- Solução paralela de alto volume — Muitos trabalhadores iniciando simultaneamente
Python: Otimização de DNS
Verifique o comportamento atual do DNS
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)")
validação antecipada em staging e 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()}")
Use um resolvedor de DNS com menor latência
Configure seu sistema ou aplicativo para usar DNS público rápido:
# 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: Otimização de DNS
Medir a resolução do 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}`);
});
});
validação antecipada em staging com cache DNS
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}`);
})();
Ambientes sem servidor e de contêiner
Em contêineres AWS Lambda, Google Cloud Functions e Docker:
| Meio Ambiente | Comportamento do cache DNS | Recomendação |
|---|---|---|
| AWS Lambda | Armazenado em cache no contexto de execução, perdido na inicialização a frio | validação antecipada em staging no manipulador init |
| Funções do Google Cloud | Armazenado em cache na instância | validação antecipada em staging em escopo global |
| Docker | Usa DNS do host por padrão | Configurar --dns 1.1.1.1 |
| Kubernetes | CoreDNS com cache configurável | Defina ndots: 1 na configuração de DNS do pod |
Solução de problemas
| Problema | Causa | Correção |
|---|---|---|
| Primeira chamada de API lenta, descanse rápido | Pesquisa de DNS na primeira chamada | Normal com cache do sistema operacional; usar keep-alive |
| Todas as chamadas lentas (~100ms+ adicionadas) | Sem cache DNS, resolução lenta | Defina DNS para 1.1.1.1 ou 8.8.8.8 |
| Picos de latência aleatórios | Expiração do TTL do cache DNS | Aumente o TTL do cache local ou pré-resolva |
| Inicialização a frio do contêiner lenta | Nenhum DNS armazenado em cache na nova instância | validação antecipada em staging no código de inicialização |
Perguntas frequentes
Realmente vale a pena otimizar o DNS para resolver CAPTCHA?
Para a maioria das configurações com conexões keep-alive, o DNS é resolvido uma vez e reutilizado. É importante principalmente para ambientes sem servidor, inicializações a frio ou ao criar novas conexões por solicitação.
Qual provedor de DNS devo usar?
Cloudflare (1.1.1.1) e Google (8.8.8.8) são os resolvedores de DNS públicos com menor latência. Ambos são resolvidos em <10ms na maioria das regiões.
CaptchaAI usa vários endereços IP?
Sim. O DNS pode retornar IPs diferentes nas pesquisas. Este é o balanceamento de carga normal. O keep-alive da conexão permanece no IP resolvido durante toda a vida útil da conexão.
Próximas etapas
Elimine a latência de DNS oculta em seu pipeline —obtenha sua chave API CaptchaAI.
Guias relacionados:
- Conexão Keep-Alive e HTTP/2
- Comparativo de tempos de resolução
- Guia de otimização de latência