TL;DR

  • Charles Proxy intercepta tráfico HTTP/HTTPS para inspección y modificación
  • SSL Proxying requiere instalación de certificado en dispositivo (móvil/navegador)
  • Breakpoints permiten modificar requests/responses en tiempo real
  • Map Local/Remote redirige requests a archivos locales o servidores diferentes
  • Throttling simula redes lentas para testing de rendimiento

Ideal para: Testers móviles, desarrolladores de API, debugging de issues en producción Omite si: Solo necesitas inspección simple de requests (DevTools del navegador es suficiente) Tiempo de lectura: 14 minutos

La app móvil crashea pero solo en redes lentas. La API retorna datos diferentes en producción que en staging. Necesitas testear manejo de errores pero no puedes hacer que el servidor retorne errores.

Charles Proxy se ubica entre tu app e internet. Ve todo, permite cambiar cualquier cosa. El debugging de red se vuelve posible en lugar de adivinar.

Este tutorial cubre Charles desde instalación hasta técnicas avanzadas.

¿Qué es Charles Proxy?

Charles Proxy es un HTTP proxy y monitor. Captura tráfico de red de cualquier aplicación configurada para usarlo, mostrando requests y responses para inspección.

Qué hace Charles:

  • Intercepta tráfico — ve cada request que hace tu app
  • Inspecciona SSL/TLS — desencripta HTTPS para debugging
  • Modifica requests — cambia headers, body, URL antes de enviar
  • Mockea responses — retorna datos falsos sin cambios en servidor
  • Throttlea bandwidth — simula redes lentas/inestables
  • Graba sesiones — guarda y reproduce tráfico

Instalación y Setup

Instalación

macOS:

brew install --cask charles

SSL Proxying

Por defecto, Charles no puede leer contenido HTTPS. Habilita SSL Proxying:

  1. Proxy → SSL Proxying Settings
  2. Marca Enable SSL Proxying
  3. Agrega hosts: * para todos, o específicos como api.example.com
  4. Instala Charles Root Certificate:
    • macOS: Help → SSL Proxying → Install Charles Root Certificate
    • Confía en Keychain Access (Always Trust)

Configuración de Dispositivos Móviles

iOS

  1. Conecta iPhone a la misma WiFi que la computadora
  2. Encuentra la IP de tu computadora: Help → Local IP Address
  3. En iPhone: Ajustes → WiFi → (i) junto a la red
  4. Configurar Proxy → Manual
    • Servidor: IP de tu computadora
    • Puerto: 8888
  5. Instala certificado SSL:
    • Abre Safari, ve a chls.pro/ssl
    • Descarga e instala perfil
    • Ajustes → General → Info → Confianza de Certificados

Android

  1. Conecta a la misma WiFi
  2. Ajustes WiFi → Modificar Red → Avanzado
  3. Proxy: Manual
    • Nombre de host: IP de computadora
    • Puerto: 8888
  4. Instala certificado desde chls.pro/ssl

Modificación de Requests

Breakpoints

Detén requests para modificación manual:

  1. Click derecho en request → Breakpoints
  2. Cuando el request llegue al breakpoint:
    • Modifica URL, headers, body
    • Click Execute para continuar

Rewrite Tool

Modificaciones automáticas:

  1. Tools → Rewrite
  2. Configura regla:
    • Location: api.example.com
    • Type: Modify Header / Body / URL
    • Match y Replace valores

Ejemplo — agregar auth header:

Type: Add Header
Where: Request
Header Name: Authorization
Header Value: Bearer test-token-123

Mockeo de Responses

Map Local

Retorna archivo local en lugar de respuesta del servidor:

  1. Click derecho en request → Map Local
  2. Selecciona archivo local (JSON, HTML)
  3. Todos los requests coincidentes retornan tu archivo
// mock-user.json
{
    "id": 1,
    "name": "Test User",
    "role": "admin"
}

Map Remote

Redirige requests a servidor diferente:

  1. Tools → Map Remote
  2. Map from: https://api.example.com/*
  3. Map to: https://staging.example.com/*

Throttling de Red

  1. Proxy → Throttle Settings
  2. Habilita Throttling
  3. Elige preset o personaliza:
PresetBandwidthLatency
56k Modem48 kbps200ms
3G780 kbps200ms
4G8 Mbps50ms

Escenarios Comunes de Testing

Testing de Manejo de Errores

// error-500.json
{
    "error": "Internal Server Error",
    "code": 500
}

Testing de Timeouts

  1. Habilita Throttling
  2. Configura latencia muy alta (30000ms)
  3. Observa el manejo de timeout

Testing de Estados Vacíos

// empty-list.json
{
    "items": [],
    "total": 0
}

Charles Proxy con Asistencia de IA

Lo que la IA hace bien:

  • Explicar códigos de estado HTTP y headers
  • Generar mock JSON responses
  • Convertir cURL a snippets de código
  • Analizar patrones de tráfico

Lo que necesita humanos:

  • Identificar qué tráfico importa
  • Entender contexto de negocio de datos
  • Implicaciones de seguridad
  • Decisiones de testing en dispositivos reales

FAQ

¿Qué es Charles Proxy?

Charles Proxy es una aplicación HTTP proxy y monitor. Se ubica entre tu aplicación e internet, capturando todo el tráfico HTTP y HTTPS para inspección y modificación. Los testers lo usan para depurar issues de API, mockear respuestas de servidor, simular condiciones de red y entender cómo las aplicaciones se comunican con backends.

¿Charles Proxy es gratis?

Charles Proxy ofrece un trial gratuito de 30 días con límites de sesión de 30 minutos. Después del trial, la licencia cuesta $50 por usuario (compra única). Alternativas gratuitas incluyen mitmproxy (línea de comandos, open source), Proxyman (macOS nativo), y DevTools del navegador para inspección básica.

¿Cómo uso Charles con apps móviles?

Configura los ajustes de proxy WiFi de tu dispositivo móvil para apuntar a la dirección IP de tu computadora y el puerto de Charles (8888). Ambos dispositivos deben estar en la misma red. Para tráfico HTTPS, instala el certificado SSL de Charles en tu dispositivo. Apps Android 7+ pueden necesitar configuración adicional para confiar en certificados de usuario.

¿Puede Charles modificar respuestas de API?

Sí. Charles ofrece varias opciones: Breakpoints para edición en tiempo real, Map Local para retornar archivos locales, Map Remote para redirigir a servidores diferentes, y reglas Rewrite para modificaciones automáticas de headers/body.

Recursos Oficiales

Ver También