
Inspeccionar una petición HTTP: curl, mensaje en bruto y HAR
Formatea un Copy as cURL, analiza una petición o respuesta HTTP en bruto y lee un export HAR en tu navegador: no se envía ni se repite nada.
Una petición, tres formas de leerla: comando cURL, mensaje en bruto, archivo HAR
Cuando una integración con una API se comporta mal, la prueba casi siempre es un intercambio HTTP que puedes copiar desde las DevTools. El problema es la forma en que llega: el Copy as cURL de Chrome es una sola línea interminable, una respuesta pegada es un bloque de cabeceras con un cuerpo debajo, y un export HAR es un archivo JSON con cientos de entradas. El formateador de cURL convierte un Copy as cURL o un Copy as fetch en cURL multilínea legible, o en HTTP/1.1, un archivo .http, fetch de JavaScript, Python requests, Go o PHP. El analizador de mensajes HTTP lee una petición en bruto, una respuesta o un bloque de cabeceras, conserva las cabeceras duplicadas y da formato a un cuerpo JSON. El inspector de HAR abre toda una sesión grabada, la reduce a la llamada que falla y la copia de vuelta como cURL. Las tres herramientas trabajan con texto pegado en tu navegador: FastMinify nunca envía la petición, nunca consulta la URL pegada y no tiene ejecutor ni proxy, así que un token incluido en lo pegado se queda en tu pestaña. Esta guía explica qué herramienta responde a qué pregunta, cómo depurar una petición que funciona en el navegador pero no en tu script, los errores que filtran credenciales o te desorientan, la anatomía de un mensaje HTTP y las mismas comprobaciones en un terminal y en Node. Las herramientas están en el hub de herramientas HTTP.
Qué herramienta responde a qué pregunta
Estas tres herramientas sirven para leer, traducir y compartir un intercambio HTTP. No lo ejecutan.
Cada herramienta termina donde empieza otra. Pasa el relevo a las herramientas vecinas o a tu propio código.
Depurar una llamada a una API a partir de una petición copiada
Pega el Copy as cURL en el formateador de cURL y léelo línea por línea: contiene todo lo que añadió el navegador, no solo lo que necesita tu código.
Pega la respuesta en el analizador de mensajes HTTP. La línea de estado, la tabla de cabeceras y el cuerpo aparecen por separado.
Abre el export en el inspector de HAR y reduce la lista antes de leer ningún detalle.
Cuatro errores que filtran una credencial o te despistan
Un Copy as cURL de una sesión autenticada lleva tus cabeceras Cookie y Authorization, y cualquiera que lea el ticket puede repetir la llamada como si fueras tú. El interruptor Quitar secretos omite de la copia Cookie, Authorization, Referer, sec-ch-* y los valores de -u y -b. Viene desactivado por defecto en el formateador y en el Copiar como cURL del analizador, y activado en el inspector de HAR. Solo actúa sobre cabeceras: un token en la cadena de consulta (?access_token=), en el cuerpo de la petición, en una cabecera propia como X-Api-Key o en el cuerpo de una respuesta se queda exactamente donde estaba. Lee la salida antes de pegarla y renueva todo lo que ya haya salido de tu equipo. El escáner de secretos ayuda a detectar una clave que no habías visto.
El Tiempo del inspector de HAR es la duración de la entrada más larga, no el tiempo de carga de la página, y Tamaño suma los tamaños de cuerpo registrados en cada entrada. Responden a «qué llamada fue la más lenta» y «cuántos datos circularon», no a lo que mide Lighthouse. Las peticiones se ejecutan en paralelo, así que la suma de los tiempos tampoco es el tiempo de la página. Las respuestas en caché y los cuerpos comprimidos hacen que los tamaños difieran de los que muestra el pie del panel de red.
El formateador entiende el subconjunto de cURL que generan las DevTools e ignora el resto sin avisar. Opciones como -L, -s, -k, --insecure, -v y -o desaparecen de la salida: un comando que contaba con -L para seguir una redirección o con -k para saltarse la comprobación del certificado pierde ese comportamiento al traducirse. Algunas entradas se rechazan con un mensaje claro: subidas multipart (-F), subidas de archivo con -T, cuerpos @archivo, {{variables}} de REST Client, archivos .http con varias peticiones, fragmentos de axios y llamadas fetch con plantillas literales o variables sin resolver. Una respuesta pegada no es una petición, así que no hay nada que convertir a cURL.
Varias salidas reindentan un cuerpo JSON: el cURL multilínea, las salidas HTTP/1.1 y .http, el fetch de JavaScript, y Python requests, que lo convierte en un literal json=. El cURL de una línea conserva el cuerpo tal como lo pegaste. Para la mayoría de las API es inocuo, y fatal cuando el servidor comprueba una firma calculada sobre los bytes exactos, como suelen hacer los endpoints de webhooks: un solo espacio añadido y el HMAC deja de coincidir. La guía de hash y HMAC explica cómo se construyen esas firmas.
Anatomía de un mensaje HTTP y qué mira cada herramienta
Un mensaje HTTP/1.1 es texto plano (RFC 9112) y su significado lo define la RFC 9110. Petición y respuesta comparten la misma disposición.
Las herramientas convierten de una a otra, por eso una petición copiada puede acabar siendo cualquiera de ellas.
Un orden de lectura corto ahorra la mayoría de las sesiones de depuración largas.
Las tres herramientas, paso a paso
El formateador de cURL reformatea mientras pegas, sin botón Enviar. En Chrome, haz clic derecho sobre la petición en la pestaña Red, luego Copy y Copy as cURL (bash).
Pega el comando
Se detectan un Copy as cURL, un Copy as fetch, un archivo .http de una sola petición o una petición HTTP/1.1 en bruto. Las continuaciones de línea se unen por ti.
Elige el lenguaje y la disposición
cURL, HTTP/1.1, .http, fetch de JavaScript, Python requests, Go net/http o PHP curl, en disposición multilínea o de una línea.
Activa Quitar secretos antes de compartir
Omite de la copia Cookie, Authorization, Referer, sec-ch-* y los valores de -u y -b. Las cadenas de consulta y los cuerpos quedan intactos.
Copia o descarga el resultado
Cada lenguaje tiene su propio nombre de archivo (formatted-curl.sh, formatted-request.http, formatted-requests.py y así sucesivamente). Un error de análisis indica qué se rechazó y por qué.
El analizador de mensajes HTTP presenta un mensaje pegado como línea inicial, tabla de cabeceras y cuerpo.
Pega el mensaje
Una petición, una respuesta, un bloque de cabeceras sueltas o la salida de curl -v. Funcionan los finales de línea LF y CRLF.
Comprueba el tipo detectado
La herramienta lo etiqueta como Petición HTTP, Respuesta HTTP o Solo cabeceras, y muestra el número de cabeceras. Los duplicados siguen en filas separadas.
Lee el cuerpo
Un cuerpo JSON se formatea por defecto, con un interruptor para verlo en bruto. Los cuerpos chunked no se reensamblan.
Copia una petición como cURL
Hace falta una petición con URL absoluta o una cabecera Host. Con solo Host, el esquema se adivina: http para localhost, 127.0.0.1 o el puerto 80, y https en el resto de casos. El interruptor Sanear la copia viene desactivado por defecto.
El inspector de HAR lee el archivo en tu pestaña y nunca consulta las URL que lista.
Exporta el HAR
En el panel Red, usa el icono de descarga (Export HAR). Se abren los exports de Chrome, Firefox, Edge, Charles y HTTP Toolkit de hasta 50 MB; por encima de 20 MB el filtrado puede ir lento.
Suelta el archivo o pega el JSON
Un archivo .har o .json, o el propio JSON HAR 1.2. El botón de ejemplo carga una captura pequeña para probar los filtros.
Reduce la lista
Filtros de tipo (XHR, JS, CSS, Img, Media, Font, Doc, Otros, Errores), un método, una clase de estado y la búsqueda «URL contiene». El tipo sale de la entrada cuando Chrome lo registra, o del tipo MIME de la respuesta.
Abre una llamada y extráela
Lee las cabeceras de petición y de respuesta, el payload y la vista previa del cuerpo. Copiar cURL, Copiar HTTP/1.1 o Copiar URL, o descarga el archivo: con Sanitizar secretos activado se escribe como sanitized.har, sin las cabeceras Cookie, Set-Cookie, Authorization, Referer y sec-ch-* ni las listas de cookies.
Algunos límites que conviene conocer antes de fiarse de ellas.
Las mismas comprobaciones en un terminal y en Node
Cuando puedes ejecutar un comando, curl muestra los mismos datos que presenta el analizador. Guarda los tokens en variables de entorno, no en el comando que pegas en un ticket.
Ejemplo básico
Un HAR es JSON, así que unas pocas líneas listan las llamadas fallidas. A diferencia del contador Errores del inspector, este filtro conserva también el estado 0.
Ejemplo básico
Toma la salida de Copy as fetch, mueve el secreto a una variable de entorno y muestra lo que vuelve. Los fragmentos que genera el formateador son un punto de partida del mismo tipo.
Ejemplo básico
Nada que instalar y nada enviado: el formateador de cURL, el analizador de mensajes HTTP y el inspector de HAR cubren leer, traducir y compartir una petición. Las contrapartidas: sin repetición, un subconjunto de cURL, sin cascada de tiempos y una limpieza que solo conoce las cabeceras. Para una prueba real, lanza la llamada desde un terminal, Postman o tu propia suite de pruebas; para comprobar una especificación en vez de una llamada, usa el validador OpenAPI.
Conclusión
Un intercambio HTTP es solo texto, y depurarlo consiste sobre todo en leerlo en la forma adecuada. El formateador de cURL hace legible y portable un Copy as cURL, el analizador de mensajes HTTP presenta una petición o respuesta en bruto con sus cabeceras duplicadas y su cuerpo JSON, y el inspector de HAR reduce una sesión grabada a la llamada que falló. Ninguno envía nada: tú controlas lo que sale de tu navegador, y eso importa porque lo que pegas contiene cookies y tokens. Quita los secretos antes de compartir, recuerda que eso solo limpia cabeceras y lee los contadores por lo que son. El hub de herramientas HTTP reúne las herramientas vecinas para URL y cookies.
Inspecciona una petición en tu navegador
Artículos relacionados

Decodifica la cabecera y el payload de un JWT o firma un token de prueba en tu navegador: HS256, RS256, ES256, sin enviar el secreto a un servidor ajeno.

Longitud, entropía, símbolos: genera una contraseña robusta en el navegador con Web Crypto y conoce lo que la herramienta no garantiza.

Prueba una regex de JavaScript, revisa los grupos de captura y previsualiza un reemplazo $1 en el navegador, antes de pasarla a producción.