Ayuda de Net Tinker

Read in English

En esta página

Quiero… — encontrar la herramienta adecuada

Cada nombre en negrita está escrito exactamente como aparece en la extensión, así que puedes buscarlo con Ctrl+F aquí y encontrarlo igual en la interfaz.

…cambiar lo que hace una petición o una respuesta

Todo esto es una regla. El tipo se elige en el desplegable Tipo de regla al crearla.

Quiero… Usa esto
Que un endpoint devuelva un 500, un 404, un 401 — un error difícil de provocar de verdad Tipo Mockear la respuesta (API) (la petición no llega a salir), y ajusta el Código de estado. Ver Tu primera regla.
Devolver datos de prueba de un endpoint que todavía no existe Tipo Mockear la respuesta (API), escribe el JSON en Body de respuesta. Ver Tu primera regla.
Partir de lo que devolvió el servidor de verdad, en vez de escribir un fixture El botón Mockear del panel de DevTools — ver Crear reglas a partir de tráfico real.
Cambiar un solo campo de una respuesta real de la API y dejar el resto igual Tipo Modificar el body de la respuesta real, Modo = Sobrescribir un campo JSON, p. ej. Ruta del campo user.status.
Sustituir un texto dentro de una respuesta real Tipo Modificar el body de la respuesta real, Modo = Buscar y reemplazar.
Añadir, sobrescribir o quitar una cabecera Tipo Modificar headers — ver la sintaxis y los Presets de ahí abajo.
Mandar una cabecera Authorization que la app no envía Tipo Modificar headers, preset Cabeceras de auth. Escribe Authorization: Bearer {{token}}, así que define una variable token para acompañarlo.
Que el navegador deje de servir de caché y mi regla tenga ocasión de aplicarse Puntual: ↻ Recargar sin caché en el popup. Para todas las recargas: tipo Modificar headers, preset Bypass de caché.
Sortear una queja de CORS mientras desarrollo Tipo Modificar headers, preset CORS de desarrollo — pero lee antes Cosas que parecen fallos y no lo son: no levanta un bloqueo real del navegador.
Apuntar una llamada a localhost o a otro entorno Tipo Redirigir petición, rellena Redirigir a.
Cambiar staging por local en todas las URL, conservando el resto Tipo Reemplazar texto en la URL (Buscar / Reemplazar por).
Forzar un parámetro de query que la interfaz no expone (un flag de debug, un tamaño de página) Tipo Parámetro de query.
Que una llamada falle, para ver qué hace mi manejo de errores Tipo Cancelar petición.
Probar con red lenta, spinners y estados de carga Pon Latencia (ms) en el bloque Simulación de red de la regla. Funciona con cualquier tipo — incluida una regla que no haga nada más.
Ver qué hace mi interfaz si este endpoint devuelve un 500, pero con el payload real y sin escribir un mock Pon Sobrescribir el estado real en el bloque Simulación de red de la regla. La petición sigue saliendo, el body real sigue volviendo y solo cambia el código de estado. Ver Sobrescribir el estado de una respuesta real.
Enviar al backend un payload que la interfaz nunca mandaría Tipo Modificar body de la petición.
Mockear un endpoint y que además tarde — o redirigir una llamada y añadirle una cabecera Dos reglas que coincidan con la misma URL, una para cada mitad: se aplican todas. Ver Cuando varias reglas coinciden con la misma petición.
Afectar a una sola operación GraphQL, no a todo el endpoint Cualquier tipo de regla, más una Condición de body como "operationName":"GetUser". El panel de DevTools te la rellena.
Limitar una regla a una pestaña para que no afecte a todo lo que tengo abierto El botón 📌 junto a la regla en el popup — ver condiciones extra.

…moverme por la extensión

Quiero… Usa esto
Averiguar por qué mi regla no hace nada Por qué una regla puede no estar aplicándose — la lista completa, en orden.
Comprobar que mi patrón coincide con una URL antes de guardar la regla URL de prueba (opcional), justo debajo del patrón en el formulario. Ver matching.
Saber cuál de mis reglas gana cuando dos coinciden con la misma URL Cuando varias reglas coinciden con la misma petición — respuesta corta: se aplican todas, y donde chocan gana la que esté más abajo en la lista.
Ver qué peticiones ha atrapado una regla de verdad Grabar esta pestaña en el popup y luego 📡 Capturas en la página de opciones. Ver Ver qué ha pasado de verdad.
Cambiar un host entre Local, Staging y Prod sin editar todas las reglas Variables más Entornos.
Activar o desactivar varias reglas a la vez Métetelas en un Grupo (panel Grupos, arriba de la página de opciones) y activa o desactiva el grupo. O selecciona varias reglas del listado y usa la barra que aparece.
Encontrar una regla entre muchas El buscador y el filtro de tipo que tiene al lado. La caja dice "nombre, URL o grupo", pero en realidad mira también dentro de la Descripción y de las Etiquetas.
Compartir mi configuración con alguien, o llevármela a otra máquina Exportar / Importar en la página de opciones. Lee qué cubre "sanitizar al exportar" antes de mandar el fichero.
Darle a alguien una traza de lo que hizo la página Exportar HAR en el panel de DevTools — ver Crear reglas a partir de tráfico real.
Copiar una petición a una terminal o a la consola Copiar como… en el panel de DevTools (cURL o fetch()).
Reutilizar mis reglas en mis tests de Playwright o Cypress Copiar como… en la fila de la regla (una sola), o Exportar → los botones de mocks del diálogo (todas, o las seleccionadas). Lee los comentarios del fragmento antes de commitearlo: dicen qué se ha tapado y qué no se ha podido traducir.
Llamar al endpoint que una regla intercepta, para comparar con lo real El mismo Copiar como… de la fila, opciones cURL y fetch().
Que una regla gane a otra que también coincide Súbela o bájala con y : gana la que está más abajo. Ver Cuando varias reglas coinciden.
Que la extensión no toque más que mis sitios Alcance en la página de opciones: en todas partes, solo localhost, o solo los dominios que escribas.
Apagar todo un momento sin borrar nada El interruptor maestro: Activa en el popup, Extensión activa en la página de opciones.

Tu primera regla: qué campos importan de verdad

Pulsa + Nueva regla (en el popup o en la página de opciones). El formulario se abre en Mockear la respuesta (API), que es el caso más común: contestar una petición desde el navegador en vez de dejar que llegue al servidor. Lo que el formulario enseña de entrada es poco —el resto va plegado en cuatro bloques, que se explican justo debajo— y casi todo es opcional. Esto es lo que necesita de verdad un mock JSON:

  1. URL / patrón — el único campo sin el cual la extensión no guarda la regla. Por defecto se lee como Contiene, así que con /api/users basta para atrapar todas las URL que lleven ese fragmento. Ver Elegir con qué peticiones coincide una regla.
  2. Código de estado — empieza en 200. Es una caja numérica normal con una lista de sugerencias asociada (200, 201, 204, 301, 400, 401, 403, 404, 429, 500, 502, 503…): pincha para elegir una, o escribe directamente el código que quieras.
  3. Headers — una regla de mock nueva se abre con Content-Type: application/json ya escrito en la caja, como valor de verdad: puedes editarlo o borrarlo, y lo que se ve es lo que se guarda. Si lo borras, el mock vuelve como texto plano —algo perfectamente legítimo, para reproducir un servidor que no manda el tipo—, y al guardar nadie te repone la cabecera. Abrir una regla que ya existe no le añade nada, ni aunque tenga los headers vacíos.
  4. Body de respuesta — lo que recibe quien llama. Los botones { } Formatear y { } Minificar de encima ordenan el JSON, y un aviso debajo te dice si lo que has escrito es JSON válido.

Todo lo demás sirve para afinar la regla o para encontrarla después, y vive en cuatro bloques plegables: Organización (descripción, etiquetas, grupo), Coincidencia avanzada (origen, tipo de match, método), Condiciones adicionales (opcional) (condiciones de header, body e iniciador) y Simulación de red (latencia y código de estado, que se aplican a cualquier tipo de regla). En una regla nueva los cuatro empiezan cerrados; al editar una que ya existe se abre cada bloque que esa regla use, así que un bloque plegado nunca esconde algo que hayas puesto. Dos cosas que conviene hacer antes de cerrar:

Tipos de regla

Cada regla tiene exactamente un tipo, que decide qué ocurre cuando coincide con una petición. El nombre en negrita es el del desplegable Tipo de regla, donde los nueve van agrupados por lo que le hacen a la petición —Mock, Passthrough modificado, Redirect y Block, la división que explica Mock vs. passthrough modificado—; el nombre corto entre corchetes es como aparece ese mismo tipo en el listado de reglas, en el filtro de tipo y en la lista de capturas. Una regla hace una sola de estas cosas — pero una petición puede estar gobernada por varias reglas a la vez, así que combinar dos tipos es cuestión de escribir dos reglas. Ver Cuando varias reglas coinciden con la misma petición.

Tipo Qué hace Cuándo usarlo
Mockear la respuesta (API)
[Respuesta]
La petición no llega a la red. Tú defines el status, los headers y el body. El endpoint todavía no existe, o necesitas un caso concreto (500, lista vacía, datos malformados) difícil de provocar de verdad.
Modificar body de la petición
[Body petición]
La petición sale de verdad, pero con un body distinto al que envió la página. Probar cómo reacciona el backend a un payload que la interfaz normalmente no enviaría.
Modificar headers
[Headers]
Añade, sobrescribe o quita headers de petición y/o respuesta. La petición sale de verdad. Uno por línea: Clave: Valor sobrescribe o añade, +Clave: Valor añade sin quitar lo que ya hubiera, -Clave elimina. El desplegable Presets te rellena las cajas con tres conjuntos habituales —Bypass de caché, CORS de desarrollo y Cabeceras de auth—, sumándose a lo que ya hubieras escrito y sustituyendo solo las líneas de la misma cabecera. Forzar un header de feature flag, probar un header CORS que falta o sobra, simular un header de auth en local.
Redirigir petición
[Redirección]
Envía la petición a otra URL completamente distinta. Apuntar una llamada a un servidor local o a otro entorno sin tocar la configuración de la app.
Cancelar petición
[Cancelar]
La petición falla directamente — fetch se rechaza, XHR dispara un evento de error. Probar qué hace tu interfaz cuando una llamada falla o un script no carga.
Parámetro de query
[Query param]
Añade o quita parámetros de la query string. La petición sale de verdad. Uno por línea: +clave=valor añade o sobrescribe, -clave elimina. Forzar un parámetro que la interfaz no expone (un flag de debug, un tamaño de página).
Reemplazar texto en la URL
[Reemplazo]
Sustituye todas las apariciones de un texto dentro de la URL, manteniendo el resto igual. La petición sale de verdad. El texto que escribes en Buscar se busca literalmente, carácter a carácter — no es una expresión regular, así que un . solo coincide con un punto de verdad. Cambiar staging por production en una URL sin montar una redirección completa.
Sin cambios (solo retrasar)
[Sin cambios]
No le hace nada a la petición por sí misma: sale exactamente como la construyó la página. Existe para que una regla pueda llevar solo un modificador —hoy, una latencia— sin tener que cambiar además otra cosa. Hacer lento un endpoint sin alterarlo de ninguna otra forma.
Modificar el body de la respuesta real
[Body respuesta]
La petición sale completamente igual; solo se transforma el body que vuelve, antes de que tu código lo vea. Dos modos: Buscar y reemplazar (texto literal, todas las apariciones) o Sobrescribir un campo JSON (una ruta con puntos como user.status, dejando el resto del JSON tal cual). Tiene límites propios — ver Cosas que parecen fallos y no lo son. Cambiar un campo de una respuesta real de la API (p. ej. un status) sin escribir un mock completo a mano.

La latencia no es un tipo de regla

Retrasar una petición era un tipo aparte y ha dejado de serlo. Latencia (ms) vive en el bloque Simulación de red del formulario y se aplica a todos los tipos: un mock llega tarde, una redirección sale tarde, una petición cancelada falla tarde. Si dejas el campo vacío la regla no añade ninguna latencia; 0 no es lo mismo que vacío — es una espera real, aunque sea mínima.

Si lo único que quieres es hacer lento un endpoint, usa el tipo Sin cambios (solo retrasar) y ponle una latencia. Las reglas que eran del antiguo tipo Retraso se convirtieron exactamente en eso, conservando sus milisegundos, la primera vez que abriste esta versión.

Sobrescribir el estado de una respuesta real

Hay dos campos en el formulario que son un código de estado HTTP, y no son lo mismo. Es la confusión más fácil de tener aquí, así que va primero:

Campo Qué es Dónde está
Código de estado El estado de una respuesta que fabrica la extensión. La petición no llega a salir, así que no hay ninguna respuesta real por ninguna parte. Solo con el tipo Mockear la respuesta (API), junto al body y las cabeceras del mock.
Sobrescribir el estado real Sustituye el estado de la respuesta que ha vuelto del servidor. El body real, las cabeceras reales y todo lo demás llegan intactos. En el bloque Simulación de red, con cualquier tipo de regla.

El caso para el que existe: quieres ver qué hace tu manejo de errores ante un 500 de ese endpoint, pero con los datos de verdad. Con un mock tendrías que escribir el body entero a mano — y entonces ya no estarías probando contra la respuesta real, que era justo lo que querías conservar.

Y como cualquier modificador, se combina: una misma regla puede sobrescribir el estado y transformar el body de la respuesta, y cambiarle una cabecera, y llegar tarde.

Mock vs. passthrough modificado

Es la confusión más habitual, así que merece explicarse aparte:

Mock — la petición nunca sale del navegador. Net Tinker construye un Response falso (o simula las propiedades del XHR) y lo devuelve directamente. El servidor real nunca llega a verla.
Passthrough modificado (body de la petición, headers, redirección, query params, reemplazo en la URL, sin cambios) — la petición sale de verdad por la red, solo que no exactamente como —ni cuando, porque cualquier regla puede llevar una latencia— la construyó la página. El servidor real la ve, y su respuesta real vuelve (posiblemente con los headers de respuesta también modificados de vuelta, en el caso del tipo "headers").
Modificar el body de la respuesta real — la petición sale completamente igual, y solo el body que vuelve se transforma (buscar/reemplazar, o sobrescribir un campo JSON) antes de que tu código lo lea. Los bodies que no son JSON no se pueden inspeccionar para el modo "sobrescribir un campo", así que se dejan intactos en vez de fallar en silencio sin que se note.

Una forma práctica de distinguirlos mientras depuras: abre la pestaña Network de DevTools. Una petición mockeada nunca aparece ahí (no llegó a la red); una modificada-y-dejada-pasar sí, con la URL/body/headers ya reescritos. La lista de capturas dice lo mismo con palabras, petición a petición: "llegó a la red" o "no llegó a la red".

Es una propiedad de la petición, no de cada regla por separado: en cuanto una de las reglas que coinciden la mockea, la petición ya no sale del navegador, hagan lo que hagan las demás. Un mock con latencia es una respuesta que llega tarde y que sigue sin llegar al servidor — ver Cuando varias reglas coinciden con la misma petición.

Elegir con qué peticiones coincide una regla

Sea del tipo que sea, toda regla parte de un patrón: el desplegable Origen decide si ese patrón se compara con la URL completa o solo con el Host, y el desplegable Tipo de match decide cómo. Los dos están dentro del bloque Coincidencia avanzada del formulario, plegado hasta que lo abras:

Tipo de match Cómo se lee el patrón
Contiene (el de por defecto) Coincide si el patrón aparece en cualquier parte de la URL/host. /api/users atrapa todas las URL que lleven ese fragmento.
Es igual a Coincide solo si la URL/host es exactamente el patrón, carácter a carácter.
Regex El patrón es una expresión regular de JavaScript que se prueba contra la URL/host. No tiene que coincidir con todo salvo que la ancles con ^/$.
Wildcard (* ?) Un punto intermedio entre "Contiene" y "Regex": * representa cualquier secuencia de caracteres (incluida ninguna) y ? exactamente un carácter. Todo lo demás es literal, así que no hay que escapar nada — un . es un punto de verdad, no "cualquier carácter". Como Regex, tampoco va anclado: basta con que el patrón aparezca en algún sitio de la URL/host.
https://*.example.com/api/v?/users en modo Wildcard coincide con https://api.example.com/api/v2/users y con https://staging.example.com/api/v3/users, pero no con https://example.com/api/v10/users? es exactamente un carácter.

En vez de adivinar, pega una URL real en URL de prueba (opcional), la caja que hay justo debajo del patrón. Responde ✓ Coincide o ✗ No coincide mientras escribes, te dice contra qué ha comparado (la URL entera o solo el host) y te avisa si un patrón Regex no compila. No guarda nada ni lanza ninguna petición. Solo comprueba el patrón, el tipo de match, el origen y las exclusiones — no el método ni las condiciones de header/body/iniciador de más abajo.

Todo lo de /api/ menos el health check

Un patrón lo bastante amplio como para ser útil suele serlo también para atrapar algo que no querías: el health check que tu panel pide cada cinco segundos, la llamada de login, la única petición que ya lleva un token de verdad. Para eso está Excepto URLs que contengan (una por línea), justo debajo de los tres desplegables de Coincidencia avanzada. Un patrón por línea; si alguno aparece en la URL de la petición, la regla la deja en paz.

Patrón /api/ con /api/health y /api/auth/ como exclusiones: se mockean todas las llamadas a la API menos el health check y todo lo que cuelgue de auth.

Dos cosas de esta caja son deliberadas, y conviene saberlas antes de pelearse con ella:

La caja de URL de prueba tiene en cuenta las exclusiones: una URL excluida responde ✗ La excluye «…» y dice qué línea es la responsable, en vez de prometer una coincidencia que no va a ocurrir.

Además del patrón, una regla puede llevar condiciones extra, en Condiciones adicionales (opcional) del formulario —salvo el Método, que está con los otros dos desplegables en Coincidencia avanzada—. Todas son opcionales, y todas tienen que cumplirse a la vez (AND, nunca OR):

Cuando varias reglas coinciden con la misma petición

Nada impide que dos reglas coincidan con la misma petición, y cuando pasa se aplican todas, no solo la primera. Eso es lo que permite redirigir una llamada y añadirle una cabecera, sin tener que meter las dos cosas en una sola regla.

Se aplican en el orden de la lista, de arriba abajo, y cada regla solo opina sobre la parte de la petición de la que va su tipo: una de headers aporta cambios de cabecera, un mock aporta la respuesta, y cualquiera de ellas puede aportar además una latencia. Cuando dos reglas hablan de lo mismo, gana la que está más abajo en la lista. O sea que el orden de la lista de reglas es la prioridad — con los botones y de cada regla la mueves por encima o por debajo de otra, y eso cambia de verdad lo que acaba haciendo tu petición.

Dos reglas que coinciden y las dos… Qué acaba haciendo la petición
…mockean la respuesta Contesta la de más abajo: su status, sus headers, su body. La de arriba se sustituye entera, no se mezcla con ella.
…reescriben la URL (redirección, parámetro de query, reemplazo de texto) Las dos, encadenadas: cada una reescribe la URL que dejó la anterior. "Redirigir a localhost" más "añadir ?debug=1" te da una URL de localhost con el parámetro puesto, no una cosa o la otra.
…modifican headers Los dos conjuntos de líneas, ejecutados uno detrás de otro en el orden de la lista — así que para una misma cabecera gana la línea posterior, igual que si fueran dos líneas dentro de una sola regla.
…modifican el body de la respuesta real Las dos, en orden: la regla de más abajo transforma lo que dejó la de más arriba.
…ponen una latencia, o modifican el body de la petición El valor de la de más abajo. Una latencia de 0 ms y un body vacío son respuestas reales, no un "no opino".
Una sola regla que mockea /api/users con un 500 y lleva 2000 ms de latencia te da un 500 que tarda dos segundos en llegar. Dos reglas separadas —una que mockea y otra que solo pone la latencia— dan exactamente lo mismo, que es cómodo cuando quieres poder apagar la lentitud por su cuenta.

Hay dos combinaciones que no las decide el orden de la lista, sino una regla propia:

Para ver qué reglas gobernaron una petición concreta en vez de deducirlo, graba la pestaña y abre la lista de capturas: una petición que coincidió con tres reglas sale con una línea ⚡ por cada una, y la chapa del icono cuenta reglas aplicadas, no peticiones.

Usar variables

Define un par nombre/valor una vez (botón "{{ }} Variables" en la página de opciones) y reutilízalo como {{nombre}} en cualquier sitio donde repetirías la misma cadena: el body de una regla, el valor de un header, una URL de redirección, el valor de un query param, el texto de reemplazo de una regla "Reemplazar texto en la URL", y tanto el texto de reemplazo como el valor nuevo del campo JSON de una regla "Modificar el body de la respuesta real".

Define apiHost = api.staging.example.com y úsalo como https://{{apiHost}}/v2/users en una redirección. Cambias el entorno una vez, en un sitio, en vez de buscar cada regla que tenía el host viejo escrito a mano.

Un nombre que no coincide con ninguna variable definida se deja tal cual está escrito — {{typo}} aparece literalmente en la petición o respuesta, en vez de desaparecer en silencio, así que un error es evidente en vez de un misterio. Las variables no se sustituyen en los campos de matching de una regla (el patrón de URL, o una condición de header/body/iniciador) — esos comparan contra la petición real, así que una variable ahí no significaría nada.

Entornos

Un entorno (botón "🌐 Entornos", junto a Variables) es un conjunto con nombre de sobrescrituras sobre tus variables — Local, Staging, Prod, lo que necesites. Solo hace falta que sobrescriba lo que realmente cambia entre entornos; lo que no menciona conserva el valor propio de la variable.

Con apiHost = local.test como valor base, un entorno "Prod" puede sobrescribir solo apiHost = api.example.com y dejar el resto de variables tal cual.

Elige el entorno activo con el botón de estrella junto a él en la página de opciones, o desde el desplegable Entorno del popup (solo aparece cuando existe al menos un entorno). Sin entorno activo, cada variable usa simplemente su propio valor base — igual que antes de que existieran los entornos.

Por qué una regla puede no estar aplicándose

Primero, una comprobación rápida que ahorra mucho tiempo: el icono de la extensión en la barra lleva una chapa con el número de reglas aplicadas en la pestaña actual. Si está vacía después de recargar, no ha coincidido nada y la lista de abajo es donde mirar. Si está contando, la regla sí se aplica y la sorpresa está en lo que hace, no en si se ejecuta.

Revisa esto en orden — cubre todos los motivos por los que una regla puede fallar en silencio:

  1. El interruptor maestro (Activa arriba del popup, Extensión activa en la página de opciones) está apagado. Nada se aplica mientras lo esté.
  2. El interruptor propio de la regla está apagado.
  3. La regla pertenece a un grupo desactivado. Un grupo desactivado apaga en silencio todas las reglas de dentro — en el listado, esas reglas muestran un ⚠ junto al nombre del grupo.
  4. La regla está fijada a una pestaña concreta (📌) y estás probando desde otra.
  5. Este sitio está fuera del alcance configurado. Es el que más despista, porque no depende de la regla: si en Alcance (página de opciones) has elegido «Solo localhost» o «Solo estos dominios», en los demás sitios ninguna regla se aplica. El icono de la extensión lo dice — pasa el ratón por encima y verás «fuera de alcance aquí»—, y en ese modo el popup también lo avisa. Ojo con el caso de la lista vacía: «Solo estos dominios» sin ningún dominio escrito no permite nada, en ninguna parte.
  6. El método HTTP de la petición no coincide con el Método configurado en la regla (si no está en "Cualquiera").
  7. El patrón de URL/host no coincide de verdad — revisa el tipo de match tanto como el patrón en sí, y pega la URL real en URL de prueba (opcional) para salir de dudas. Si es Regex, una errata que deja el patrón inválido hace que la regla no coincida con nada en vez de dar un error — la caja de prueba avisa expresamente de ese caso. Otro clásico: escribir * o ? en un patrón que sigue en "Contiene" o "Es igual a", donde son caracteres literales — solo significan algo en modo Wildcard.
  8. La regla tiene un patrón de exclusión que casa con esta URL. Es el motivo más fácil de pasar por alto, porque el patrón positivo coincide y todo parece correcto: mira Excepto URLs que contengan dentro de Coincidencia avanzada — el bloque se abre solo cuando la regla trae alguna, y el resumen plegado dice cuántas hay. Pegar la URL en URL de prueba (opcional) lo resuelve en el acto: dice cuál de las líneas la excluye.
  9. La regla tiene una Condición de header, una Condición de body o un Dominio iniciador y la petición actual no los cumple. Para condiciones de header y de body en peticiones XHR en concreto: una regla de redirección/query params/reemplazo en la URL nunca puede activarse por ninguna de las dos, porque la URL se decide antes de que la página haya puesto sus headers o haya llamado a send(body) — esto solo funciona para los tipos "mock", "cancelar", "sin cambios", "modificar body de la petición" y "modificar headers" en XHR (en fetch funciona para todos los tipos). Una condición de body además solo compara contenido de texto (JSON, form-encoded, texto plano) — los bodies FormData/Blob/binarios nunca se leen para esto.
  10. La petición no es fetch ni XMLHttpRequest. Net Tinker solo puede interceptar esas dos — no puede afectar a <img>, <script src>, CSS, fuentes ni ningún otro tipo de recurso a la hora de aplicar una regla (el panel de captura de DevTools sí puede verlos todos, simplemente no puede actuar sobre ellos).
  11. La petición no ha llegado a ocurrir, porque el navegador la ha resuelto desde su propia caché. No hay nada que interceptar, y se parece exactamente a una regla que no funciona. Usa ↻ Recargar sin caché en el popup para recargar esa pestaña ignorando la caché, o añade una regla Modificar headers con el preset Bypass de caché para que pase en todas las recargas.
  12. Otra regla que también coincide la está pisando. Las reglas no se tapan entre ellas —se aplican todas—, pero cuando dos hablan de lo mismo gana la que está más abajo en la lista, y una regla Cancelar petición gana a todo. Así que la regla puede estar aplicándose perfectamente y aun así no dejar rastro: reordena la lista, o afina el patrón de la otra regla. Ver Cuando varias reglas coinciden con la misma petición.
  13. La regla tiene un tipo que esta versión no sabe aplicar. Puede pasar al importar un fichero escrito por una versión posterior, o si una actualización dejó una regla a medio migrar. Se ignora solo esa regla, exactamente como si no hubiera coincidido —nunca se responde con un mock vacío, y cualquier otra regla que coincidiera con esa misma petición sí se aplica— y la fila se marca en la lista de capturas con ⚠ y el nombre del tipo no reconocido, para que la situación se vea en vez de parecer tráfico normal. Abre la regla y vuelve a elegirle un tipo.
  14. Una regla Modificar el body de la respuesta real sí coincidió, pero la respuesta era un stream en vivo que no se puede bufferizar, así que se dejó intacta a propósito. Ver Cosas que parecen fallos y no lo son; la lista de capturas lo dice con estas palabras: "coincide pero no se aplicó — respuesta en streaming".
  15. Tienes dos copias de Net Tinker instaladas a la vez — lo normal es la de la Chrome Web Store más una de desarrollo cargada sin empaquetar. Las dos parchean la misma página, y la que responde primero se lleva la petición, así que la otra copia no ve nada: ni badge, ni línea en la lista de capturas, y la regla que estás mirando parece no hacer nada aunque sí se haya aplicado una. La pista es que la petición claramente se interceptó mientras la extensión que estás mirando no registra ninguna actividad. Desactiva una de las dos.

Ver qué ha pasado de verdad

Adivinar si una regla se ha aplicado es la vía lenta. Hay tres sitios que te lo dicen, y cada uno responde a una pregunta distinta:

La lista de capturas está apagada hasta que la pides. Abre el popup en la pestaña que quieras observar y activa Grabar esta pestaña — solo se capturan las peticiones de esa pestaña. Después abre la lista con 📡 Capturas en la página de opciones (o Ver capturas desde el popup), que muestra el panel Peticiones capturadas.

Cada fila te dice, en este orden: la página, el status, la hora, y luego qué hizo Net Tinker con ella.

A diferencia del panel de DevTools, estas capturas sí se guardan, así que siguen ahí después de cerrar la pestaña o el navegador. La lista conserva las 200 más recientes y Vaciar la limpia. La grabación se detiene sola si cierras la pestaña que estabas grabando.

Cosas que parecen fallos y no lo son

Net Tinker funciona parcheando fetch/XMLHttpRequest dentro del propio JavaScript de la página. Ese enfoque trae algunos efectos secundarios inevitables:

Crear reglas a partir de tráfico real

Abre DevTools en cualquier página y busca la pestaña "Net Tinker" (junto a Elements, Console, Network, etc.). Lista todas las peticiones que hace la página mientras el panel está abierto — no solo fetch/XHR, todos los tipos de recurso — para que encuentres exactamente la llamada que te interesa. La cabecera muestra Capturando, y al pulsarla pasa a Pausado si prefieres congelar la lista; marca Conservar registro para que no se vacíe al navegar, y Vaciar la limpia.

  1. Cada fila tiene un desplegable "+ Regla…" y un botón dedicado Mockear. Elegir un tipo abre el editor de reglas ya relleno con la URL real de esa petición (como match Es igual a, así que solo afecta a esa llamada exacta) y su método. El desplegable ofrece todos los tipos de regla menos el mock, que tiene su propio botón.
  2. Una regla creada así llega desactivada salvo que sea un mock o una cancelación — esas dos están completas en cuanto se crean, mientras que el resto son esqueletos todavía vacíos, y activar una "redirección" o un "body de respuesta" vacíos rompería justo el endpoint que estás depurando. Rellénala y luego enciéndela. El panel te dice cuál de las dos cosas ha pasado cada vez.
  3. Mockear va más allá: también copia el código de estado, los headers de respuesta y el body reales de esa petición a la nueva regla, así partes de lo que devolvió el servidor de verdad en vez de escribir un fixture a mano.
  4. Una marca ⚡ junto a una fila significa que alguna de tus reglas activas ahora mismo interceptaría esa petición exacta — se evalúa en vivo contra tus reglas actuales, no contra las que hubiera activas cuando la petición ocurrió de verdad.
  5. Cada fila también tiene una opción "Copiar como…" para copiar la petición como comando cURL o como fragmento fetch(), listo para pegar en una terminal o en la consola.
  6. Exportar HAR guarda como fichero .har estándar las peticiones que se ven ahora mismo en la lista, para dárselas a otra persona o cargarlas en otra herramienta. El diálogo enumera los valores sensibles que ha encontrado y ofrece Sanear credenciales (siempre marcado al abrirse) e Incluir cuerpos de respuesta (siempre desmarcado, recortados a 1 MB cada uno, porque son lo que engorda el fichero). Las dos casillas se rearman cada vez que se abre, así que la opción segura nunca queda apagada de una exportación anterior. Un HAR lleva las cabeceras reales de la petición, Authorization incluida, además de las cookies — trata el fichero como una credencial.
  7. Para una petición GraphQL (detectada automáticamente y mostrada como su nombre de operación junto a la URL), crear una regla desde ella también rellena una Condición de body exigiendo ese nombre de operación — porque un endpoint GraphQL sirve todas sus operaciones en la misma URL, y una regla que solo mirase la URL aplicaría a todas ellas. Puedes verlo y editarlo en la regla que se abre (es la misma condición de body de arriba, ya rellena por ti). El filtro del panel también busca por nombre de operación.
  8. El panel lista todos los tipos de recurso, pero las reglas solo se pueden aplicar a fetch/XHR. Si creas una desde la fila de una imagen, un script o una hoja de estilos, el panel te avisa: la regla se crea, pero nunca se disparará. La casilla "Solo fetch/XHR" esconde esas filas si prefieres no verlas.

Las capturas de este panel viven solo en memoria mientras DevTools está abierto — al cerrar DevTools se vacían, y no se guarda nada hasta que conviertes explícitamente una petición capturada en una regla o exportas un HAR. Esa es la diferencia con la lista de capturas de la página de opciones, que sí se guarda a propósito.

Qué cubre (y qué no) "sanitizar al exportar"

Exportar escribe tus reglas y grupos en un fichero JSON, junto con tus variables y entornos. Exportarlo todo incluye todas las variables que tengas; exportar una selección de reglas incluye solo las variables que esas reglas referencian por nombre, y poda cada entorno a ese mismo conjunto. Cuál es el entorno activo es una preferencia local tuya y nunca va en el fichero.

Como ese fichero acaba compartiéndose, la exportación pasa antes por un diálogo. Ahí se enumera lo que ha encontrado con pinta de credencial, y se marca por ti Sustituir credenciales por __REDACTED__ cuando hay algo que ocultar. Sanear busca nombres que sugieran una credencial — cualquiera que contenga auth, token, secret, password, passwd, apikey, api_key, api-key, credential, signature, cookie o session — y sustituye el valor correspondiente por __REDACTED__. Revisa:

Deliberadamente no toca:

Trata "sanitizar al exportar" como una red de seguridad contra la fuga accidental más común, no como una garantía de que el fichero exportado no contiene ningún secreto — revisa lo que vas a compartir antes de enviarlo.

A la vuelta, Importar te deja elegir qué traer y avisa cuando una regla ya existe (mismo tipo, método y patrón), ofreciéndote importarla como copia, omitirla o sobrescribir la existente — con la misma elección, por separado, para las variables cuyo valor difiera del tuyo.