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)

Charles Proxy es un proxy HTTP que se sitúa entre tu aplicación y sus servidores, permitiendo a los testers inspeccionar, modificar y simular tráfico de red en tiempo real. Con SSL proxying puedes descifrar el HTTPS de apps móviles, los breakpoints permiten editar peticiones al vuelo, Map Local devuelve respuestas falsas sin tocar el backend y el throttling simula redes lentas. Este tutorial recorre la configuración, la instalación de certificados en dispositivos y los flujos de trabajo prácticos que los equipos de QA usan a diario para depurar APIs y reproducir casos límite.

En esta guía:

¿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

«El testing móvil no puede vivir solo en el simulador. Las pruebas en dispositivos reales con hardware fragmentado y condiciones de red variables detectan bugs que los emuladores nunca van a mostrar.» — Yuri Kan, Senior QA Lead

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)

¿Cómo forzar HTTP/1.1 en lugar de HTTP/2 en Charles Proxy?

Abre Proxy → Proxy Settings, quédate en la pestaña Proxies y desmarca la casilla Support HTTP/2 del grupo HTTP Proxy. Con el soporte de HTTP/2 desactivado en Charles, las peticiones que pasan por el proxy deberían volver a HTTP/1.1; confírmalo con el paso 4 de abajo. Vuelve a marcar la casilla para regresar a HTTP/2.

  1. Ve a Proxy → Proxy Settings → Proxies
  2. Desmarca Support HTTP/2 y guarda la configuración
  3. Envía de nuevo el request desde tu app o navegador
  4. Selecciona el request y abre la pestaña Overview: la fila Protocol debe mostrar HTTP/1.1 en lugar de HTTP/2.0. Protocol también está disponible como columna en la vista Sequence

El nombre de la casilla y el campo Protocol son los mismos en Charles 4.6.8 y 5.2.1. La documentación en línea no describe esta opción, pero el soporte de HTTP/2 figura en el historial de versiones de Charles desde la versión 4.0.

Por qué los testers desactivan HTTP/2:

  • Aislar bugs específicos del protocolo — si un fallo desaparece con HTTP/1.1, está ligado al manejo de HTTP/2 en el cliente, el servidor o el proxy
  • Descartar el proxy en versiones antiguas — el historial de versiones recoge correcciones del proxying HTTP/2 en 5.2 y 5.2.1, entre ellas un bloqueo cuando los streams concurrentes agotan la ventana de la conexión
  • Comprobar el fallback a HTTP/1.1 — confirma que la app sigue funcionando cuando HTTP/2 no está disponible en la ruta de red

Dos notas relacionadas de la documentación oficial:

  • Safari solo usa HTTP/2 a través de Charles en modo SOCKS, así que ver requests HTTP/1.1 desde Safari no significa que la casilla esté desmarcada (Browser & System Configuration)
  • Desde Charles 5.1, Map Remote puede mapear un request HTTP/2 a un destino HTTP/1.1 (historial de versiones)

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:

Entre los presets están 56k Modem, 3G y 4G. Según la documentación oficial de throttling, el ancho de banda se puede limitar a cualquier valor en bytes por segundo y la latencia a cualquier número de milisegundos, así que puedes simular cualquier velocidad de conexión con valores propios.

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?

No, Charles es de pago. Puedes probarlo durante 30 días antes de comprar, y una licencia cuesta USD $50 (a septiembre de 2026). La licencia es válida para la versión mayor actual de Charles; consulta la página oficial de precios. 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