← Todos los artículos

Extensión de Chrome (Beta): cualquier request de página como una llamada a la API

Nuestra extensión de Chrome, en beta, detecta el request con los datos de una página y lo copia como una llamada de FourA en cURL, Python, Node o MCP, con headers y cookies.

Novedades

Ya conoces la rutina. Abres DevTools, recargas, te desplazas por docenas de requests hasta que una contiene los precios que buscas, haces clic derecho y seleccionas Copy as cURL. Luego empieza el trabajo real: quitar los headers que solo tienen sentido dentro de Chrome, reescribir todo para tu propio cliente y descubrir si todavía responde cuando no proviene de tu navegador.

La extensión de Chrome de FourA, ahora en beta, reduce todo eso a unos pocos clics. Agrega una pestaña FourA junto a Network que lista las requests de la página, encuentra la que contiene un fragmento de texto visible y la copia como una llamada lista para Single, Proxy Finder o Browser, en cURL, Python, Node o MCP. La misma extensión tiene un popup que envía el propio Chrome a través de uno de tus usuarios de proxy port.

Todavía no está en la Chrome Web Store. La descargas desde Tools en el Dashboard y la cargas en modo de desarrollador (Chrome, versión 116 o superior). La extensión es gratuita; el tráfico a través del túnel cuenta para la cuota de proxy de tu plan, y las llamadas que ejecutas desde DevTools cuestan lo que cobra la API.

Cómo funciona

Abre DevTools en la página de la que quieres extraer datos y selecciona la pestaña FourA. Recarga, y la pestaña listará las requests como lo hace Network, con anuncios y analíticas ocultos por defecto y un selector de This site only para las requests propias de la página. Escribe un precio, un nombre de producto o cualquier otro texto que veas en Find in responses, y te indicará las requests cuya response lo contiene. A menudo, ese es el momento en el que descubres que la página se renderiza a partir de un endpoint JSON al que puedes llamar directamente.

Selecciona la request, elige un motor en FourA call y copia. Aquí tienes el formato cURL para una request JSON en una página de tienda (resumido: la copia real incluye cada header que envió la página):

curl https://api.foura.ai/api/single \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "method": "GET",
  "url": "https://shop.example.com/api/products?category=coffee&page=2",
  "headers": [
    ["accept", "application/json"],
    ["referer", "https://shop.example.com/coffee"],
    ["accept-language", "en-GB,en;q=0.9"]
  ],
  "browser": "Chrome",
  "os": "macOS",
  "unblocker": true
}'

Tres cosas en esa llamada son deliberadas. Los headers viajan como una lista de pares, en el orden en que la página los envió, que es el formato que acepta Single. Los que Chrome escribe para su propia conexión (host, content-length, accept-encoding, connection y algunos más) se descartan, porque copiarlos rompe cualquier cliente que envíe la llamada después. Y browser junto con os solicitan el browser profile que coincide con el Chrome que estás usando. La versión se omite a propósito: la llamada obtiene la más reciente que tenemos en lugar de ser rechazada por una versión que no admitimos.

El formato MCP es el nombre de la tool (foura_single) seguido del mismo JSON, listo para un agente que se comunique con nuestro MCP server.

Luego vienen dos botones. Open in the playground carga la llamada en el Dashboard Playground, con la misma key seleccionada si es una de las tuyas. Run through FourA la envía y muestra "The browser got" y "FourA got" lado a lado, para que veas si nuestra respuesta coincide con la de la página antes de escribir una sola línea de código.

Impacto

La ruta manual está bien documentada. El tutorial de ScrapingBee requiere cinco pasos solo para extraer el cURL de Chrome, y señala que la copia incluye cada header y cookie que el navegador envió. Ahí es donde empieza la mayoría de los scrapers. También es solo la mitad del trabajo, ya que la copia demuestra que el request funciona desde tu navegador y en ningún otro lugar.

La pestaña de FourA cubre ambas mitades en un solo lugar. Encuentras el request por lo que devuelve en vez de adivinar a partir de URLs, obtienes una llamada en el formato que la API espera, y un solo clic muestra si se sostiene desde nuestro lado. Esto rinde al máximo en páginas donde los datos llegan a través de un request cuya URL no te dice nada.

Aún no tenemos cifras sobre el tiempo ahorrado. Es una beta, y la medida real será tu próximo trabajo.

Para usuarios avanzados

Cambia el motor a Proxy Finder y el panel envolverá el mismo request ofreciendo un Exit country:

{
  "request": {
    "method": "GET",
    "url": "https://shop.example.com/api/products?category=coffee&page=2",
    "headers": [["accept", "application/json"]],
    "unblocker": true
  },
  "exitCountries": ["DE"]
}

exitCountries es una allowlist estricta. La request nunca recurre a otro país por fallback, y el país que atendió la solicitud se devuelve como exitCountry. Es una función sujeta a plan, por lo que un plan sin segmentación por país responde con un rechazo explicándolo.

Browser adopta una forma diferente, ya que abre páginas en lugar de enviar requests. Toma los headers como un objeto, convierte el header Cookie de la página en una lista de cookies asociada al host, y omite user-agent y los headers de client-hint, ya que el motor envía los suyos propios (con la opción de perfil activa, envía en su lugar el user agent de esta ventana). Solo replica un GET sin body. Un POST procedente de un formulario de búsqueda pertenece a Single, donde un body JSON viaja como objeto y cualquier otra cosa como la cadena exacta que envió la página.

Haz clic derecho en cualquier request para ver las mismas opciones de copia, además de Copy URL y Copy response. La API key para las ejecuciones reside en Settings dentro de la pestaña y permanece hasta que se cierra Chrome, a menos que marques Keep the key on this computer.

Una advertencia importante. Una llamada copiada con cookies replica la sesión en la que tienes sesión iniciada. Trátala como una contraseña y mantenla fuera de tickets, chats y repositorios públicos.

La parte del popup también merece mención. Mide la dirección que un sitio ve a través del túnel en lugar de leerla desde tu configuración, y cuando esa dirección coincide con la tuya muestra Not routed. Cuando el icono cambia a rojo con un número, indica que el proxy rechazó esa cantidad de conexiones en el último minuto, y el popup explica el motivo. Las opciones de nombre de usuario tras su página Location son las mismas que documenta el puerto del proxy.

Próximos pasos

La extensión sigue en fase beta, instalable desde el Dashboard, hasta que consideremos que está terminada, y no vamos a fijar una fecha para publicarla en la Chrome Web Store. Chrome es el único navegador para el que está desarrollada y probada. La guía de configuración describe lo que se entrega hoy; los cambios futuros dependerán de lo que encuentres cuando apuntes la pestaña de FourA a un trabajo real.

Así que la próxima vez que una página le complique la vida a tu parser, abre DevTools antes de abrir el HTML. El scraper más eficiente suele ser el que invoca la request que la página ya realizó.