Tutoriales

Protección de credenciales CaptchaAI en variables de entorno

Codificar claves API en el código fuente significa que cualquier persona con acceso al repositorio (o cualquiera que encuentre su código en un repositorio público) tiene su clave. Las variables de entorno mantienen las credenciales fuera del código, el control de versiones y los registros.


Archivo .env (desarrollo local)

Cree un archivo .env en la raíz de su proyecto:

CAPTCHAAI_API_KEY=your_actual_api_key_here

Agréguelo a .gitignore inmediatamente:

# .gitignore
.env
.env.local
.env.production

Python (python-dotenv)

pip install python-dotenv
import os
from dotenv import load_dotenv

load_dotenv()

API_KEY = os.environ["CAPTCHAAI_API_KEY"]

# Use in API calls
import requests
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-SITEKEY",
    "pageurl": "https://example.com",
    "json": "1",
})
print(resp.json())

JavaScript (dotenv)

npm install dotenv
require('dotenv').config();

const API_KEY = process.env.CAPTCHAAI_API_KEY;

if (!API_KEY) {
  console.error('CAPTCHAAI_API_KEY not set');
  process.exit(1);
}

// Use in API calls
const axios = require('axios');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: API_KEY,
    method: 'userrecaptcha',
    googlekey: '6Le-SITEKEY',
    pageurl: 'https://example.com',
    json: 1,
  },
});
console.log(resp.data);

Variables de entorno del sistema

Establezca variables a nivel del sistema operativo en lugar de usar archivos .env:

Linux/macOS

export CAPTCHAAI_API_KEY="your_actual_api_key_here"

# Persist across sessions — add to ~/.bashrc or ~/.zshrc
echo 'export CAPTCHAAI_API_KEY="your_actual_api_key_here"' >> ~/.bashrc

Windows (PowerShell)

$env:CAPTCHAAI_API_KEY = "your_actual_api_key_here"

# Persist permanently
[System.Environment]::SetEnvironmentVariable("CAPTCHAAI_API_KEY", "your_actual_api_key_here", "User")

acoplador

Variable de entorno en la ejecución de Docker

docker run -e CAPTCHAAI_API_KEY="your_key" my-scraper

Composición acoplable

# docker-compose.yml
services:
  scraper:
    image: my-scraper
    environment:

      - CAPTCHAAI_API_KEY=${CAPTCHAAI_API_KEY}

${CAPTCHAAI_API_KEY} hace referencia a la variable de entorno del host; la clave nunca aparece en el archivo de redacción.

Secretos de Docker (enjambre)

echo "your_actual_api_key_here" | docker secret create captchaai_key -
# docker-compose.yml (Swarm mode)
services:
  scraper:
    image: my-scraper
    secrets:

      - captchaai_key
secrets:
  captchaai_key:
    external: true

Leer en código:

with open("/run/secrets/captchaai_key") as f:
    API_KEY = f.read().strip()

Tuberías CI/CD

Acciones de GitHub

# .github/workflows/scrape.yml
jobs:
  scrape:
    runs-on: ubuntu-latest
    steps:

      - uses: actions/checkout@v4
      - run: python scraper.py
        env:
          CAPTCHAAI_API_KEY: ${{ secrets.CAPTCHAAI_API_KEY }}

Agregue el secreto en Configuración → Secretos y variables → Acciones → Nuevo secreto de repositorio.

GitLab CI

# .gitlab-ci.yml
scrape:
  script:

    - python scraper.py
  variables:
    CAPTCHAAI_API_KEY: $CAPTCHAAI_API_KEY

Agregue la variable en Configuración -> CI/CD -> Variables con la opción "Enmascarado" habilitada.


Validación al inicio

Valide siempre que la clave exista y funcione antes de ejecutar su canalización:

import os
import sys
import requests

API_KEY = os.environ.get("CAPTCHAAI_API_KEY")
if not API_KEY:
    print("ERROR: CAPTCHAAI_API_KEY environment variable not set")
    sys.exit(1)

# Verify key works
resp = requests.get("https://ocr.captchaai.com/res.php", params={
    "key": API_KEY, "action": "getbalance", "json": "1"
}).json()

if resp["status"] != 1:
    print(f"ERROR: Invalid API key — {resp['request']}")
    sys.exit(1)

print(f"API key valid — balance: ${float(resp['request']):.2f}")

Errores comunes

error Riesgo Solución
Comprometer .env con Git Clave expuesta en el historial del repositorio Agregue .env a .gitignore antes del primer compromiso
Impresión de clave API en registros Clave visible en agregadores de registros Nunca registre claves completas: enmascare u omita
Codificación en Dockerfile Clave integrada en capas de imágenes Use ENV en tiempo de ejecución, no en etapas de compilación
Compartir claves a través del chat/email Clave interceptada o filtrada Utilice un administrador de secretos o compártalo a través de un canal seguro

Preguntas frecuentes

¿Debo cifrar el archivo .env?

Para el desarrollo local, .gitignore es suficiente. Para producción, utilice un administrador de secretos en la nube (AWS Secrets Manager, Google Secret Manager, Azure Key Vault) en lugar de archivos .env.

¿Qué pasa si mi clave ya está comprometida con Git?

Gire la clave inmediatamente en su panel de control CaptchaAI. La clave anterior en el historial de Git permanece accesible incluso después de eliminar el archivo.

¿Puedo usar varias claves en un archivo .env?

Sí. Utilice valores separados por comas o claves numeradas:

CAPTCHAAI_KEYS=key1,key2,key3
keys = os.environ["CAPTCHAAI_KEYS"].split(",")

Asegure su integración CaptchaAI desde el primer día

Obtenga su clave API encaptchaai.com.


Guías relacionadas

  • CaptchaAI Lista blanca de IP y seguridad de clave API
  • Rotación de clave API CaptchaAI
  • Inicio rápido de la API CaptchaAI

Configuración recomendada para su pipeline

Use exactamente la misma configuración de navegador en todos sus entornos de QA, staging y CI. Esto evita que un test funcione en local y falle en CI sin razón aparente.

from selenium import webdriver

def make_driver(headless: bool = True) -> webdriver.Chrome:
    options = webdriver.ChromeOptions()
    if headless:
        options.add_argument('--headless=new')
    options.add_argument('--window-size=1280,800')
    options.add_argument('--lang=es-ES')
    return webdriver.Chrome(options=options)

Mantener viewport, idioma y user-agent por defecto idénticos en todos los runners reduce la varianza y facilita comparar resultados entre ejecuciones de su propio QA.

Cómo se integra CaptchaAI en su pipeline propio

El patrón de integración con CaptchaAI siempre es el mismo, independientemente del lenguaje o framework de pruebas que use:

  1. Su test detecta el widget de CAPTCHA en la página de su propia aplicación (formulario de QA, landing de staging, endpoint de preproducción).
  2. Su test envía a CaptchaAI los datos públicos del widget (sitekey, URL de la página, tipo de CAPTCHA).
  3. CaptchaAI devuelve un token válido para esa página.
  4. Su test inyecta ese token en el campo correspondiente y envía el formulario.
  5. Su backend verifica el token con el proveedor de CAPTCHA, exactamente igual que con un usuario real.

Este flujo se aplica únicamente a integraciones que usted controla. No se utiliza para sortear protecciones de sitios de terceros.

Métricas y observabilidad

Incluya métricas específicas para los pasos relacionados con CAPTCHA en sus pipelines de QA. Esto le permite detectar regresiones en su propia integración antes de que lleguen a producción:

  • Tiempo de resolución por intento — desde la solicitud a CaptchaAI hasta la entrega del token.
  • Tasa de éxito por endpoint propio — cuántas verificaciones backend pasan respecto al total de intentos.
  • Distribución de errores — agrupados por código (ERROR_*, timeouts internos, fallos de red).
  • Latencia extremo a extremo — incluyendo render de la página, resolución de CAPTCHA y respuesta de su backend.

Conserve trazas (logs, capturas, HAR) durante un período razonable para poder reproducir incidentes en su entorno QA cuando un test falle de forma intermitente.

Buenas prácticas en su entorno QA

  • Pruebe siempre sobre su propia aplicación o sobre entornos explícitamente autorizados.
  • Mantenga una API key de CaptchaAI separada para QA, distinta de la de producción, para no mezclar métricas.
  • Defina timeouts y reintentos razonables (backoff exponencial) para no acumular trabajos pendientes en CaptchaAI durante caídas.
  • Versione sus snapshots de configuración (sitekey, action, umbrales) junto al código de los tests.
  • Revise periódicamente el changelog de su proveedor de CAPTCHA para anticipar cambios que afecten a su propia integración.

Solución de problemas

Síntoma Acción recomendada
El test no detecta el widget Revise selectores y tiempos en su entorno staging
CaptchaAI devuelve ERROR_NO_SLOT_AVAILABLE Reintente con backoff en su pipeline interna
La validación backend rechaza el token Compare action/sitekey con su configuración real
El test funciona en local pero falla en CI Iguale viewport, idioma y user-agent en ambos entornos
Tiempos de resolución muy variables Revise concurrencia y límites de su API key de CaptchaAI

Valide sus integraciones CAPTCHA en entornos propios con CaptchaAI.

Los comentarios están deshabilitados para este artículo.