Volver al blog

curl Cookies: Cómo enviar, almacenar y reutilizar sesiones de manera segura

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

21-Aug-2026

TL;DR:

  • Una cookie de curl se puede enviar directamente con -b, pero un tarro de cookies es más seguro para una sesión de múltiples solicitudes. El tarro permite a curl aplicar reglas de caducidad, dominio, ruta y transporte en lugar de reconstruir un encabezado Cookie a mano.
  • -c escribe cookies recibidas de Set-Cookie; -b lee cookies para la siguiente solicitud. Usa ambas opciones cuando un script debe actualizar y reutilizar el mismo tarro.
  • Los archivos de cookies son credenciales. Almacénalos fuera del control de versiones, limita los permisos de archivo, redacción de valores de los registros y elimínalos cuando termine el flujo de trabajo autorizado.
  • curl no ejecuta JavaScript del lado del cliente ni completa ceremonias de MFA e identificadores de acceso interactivos. Esos flujos necesitan una sesión de navegador aprobada y un límite de autenticación controlado por un ser humano.
  • Scrapeless Scraping Browser puede continuar un flujo de trabajo solo de navegador después de que curl alcance su límite. Proporciona una nueva sesión de navegador en la nube; tu aplicación sigue siendo la propietaria de la autorización y la gestión de credenciales.
  • Gratis para comenzar. Las nuevas cuentas de Scrapeless incluyen un tiempo de ejecución gratuito de Scraping Browser; regístrate en app.scrapeless.com.

Introducción: Las Cookies Convierten Solicitudes HTTP Separadas en una Sesión

Las solicitudes HTTP son independientes hasta que el servidor y el cliente están de acuerdo en el estado. Una respuesta puede establecer una cookie, y una solicitud posterior puede devolver esa cookie al host y ruta coincidentes. Ese pequeño intercambio es cómo muchas aplicaciones preservan preferencias, carritos anónimos, estado de consentimiento y sesiones autorizadas.

curl incluye un motor de cookies para exactamente este trabajo. La guía oficial de scripting HTTP de curl documenta tanto las cadenas literales de cookies como los tarros persistentes, mientras que la especificación de gestión de estado HTTP define el comportamiento del servidor y del agente de usuario detrás de ellas.

Esta guía utiliza un punto final de prueba pública y curl 8.7.1 para enviar, capturar, almacenar, inspeccionar y reutilizar cookies de demostración no sensibles. Luego dibuja una línea dura entre una sesión HTTP y la autenticación solo de navegador.


Una cookie de curl es un par de nombre-valor que curl coloca en el encabezado de la solicitud HTTP Cookie después de aplicar sus reglas del motor de cookies.

Hay dos formas de suministrarla:

Método Mejor aptitud Principal desventaja
Cadena literal con --cookie / -b Una solicitud controlada con valores no sensibles conocidos Eres responsable de cada valor y decisión coincidente
Archivo de cookies con --cookie / -b Una sesión llevada entre comandos El archivo se convierte en material de credenciales
Tarro de cookies escrito con --cookie-jar / -c Un flujo de varios pasos controlado por el servidor El tarro debe ser protegido y limpiado

La dirección de respuesta es diferente. Un servidor envía Set-Cookie; curl evalúa los atributos y registra las cookies elegibles en memoria o en un tarro. La referencia del encabezado Set-Cookie describe atributos como Domain, Path, Expires, Max-Age, Secure, HttpOnly y SameSite.


Enviar Cookies Con -b

-b es la forma corta de --cookie. Cuando su argumento contiene un signo de igual, curl trata el valor como datos de cookie en lugar de un nombre de archivo.

bash Copy
curl --silent \
  --cookie "theme=dark; view=compact" \
  https://httpbingo.org/cookies

El punto final público devuelve las cookies que recibió:

json Copy
{
  "cookies": {
    "theme": "dark",
    "view": "compact"
  }
}

Los valores literales son convenientes para preferencias inofensivas. No pongas un identificador de sesión real en una línea de comandos compartida: el historial de shell, la inspección de procesos, las grabaciones de terminal y los registros de CI pueden exponerlo.


Set-Cookie es un encabezado de respuesta, así que inspeciónalo por separado del cuerpo de respuesta. --dump-header - escribe encabezados en la salida estándar y --output /dev/null descarta el cuerpo.

bash Copy
curl --silent \
  --dump-header - \
  --output /dev/null \
  "https://httpbingo.org/cookies/set?theme=dark"

La respuesta en vivo devolvió una redirección HTTP y este encabezado:

text Copy
set-cookie: theme=dark; Path=/; HttpOnly; Secure

HttpOnly previene que JavaScript del navegador lea el valor; no detiene a un cliente HTTP de almacenar y enviar la cookie. Secure limita la transmisión a transporte seguro. Ningún atributo convierte la cookie en una concesión de permisos: el servidor aún decide a qué puede acceder la sesión.


Escribir y Reutilizar un Tarro de Cookies

Un tarro de cookies preserva los atributos del servidor en el formato de archivo de cookies de Netscape. Usa -c en la respuesta que establece el estado, luego -b en la solicitud que lo necesita.

bash Copy
COOKIE_JAR="$(mktemp)"
chmod 600 "$COOKIE_JAR"

curl --silent --location \
  --cookie-jar "$COOKIE_JAR" \
  "https://httpbingo.org/cookies/set?demo_session=authorized" \
  --output /dev/null

curl --silent \
  --cookie "$COOKIE_JAR" \
  https://httpbingo.org/cookies

El segundo comando devolvió:

json Copy
{
  "cookies": {
    "demo_session": "authorized"
  }
}

Cuando el servidor puede actualizar la sesión, lee y escribe en el mismo archivo:

bash Copy
curl --silent --location \
  --cookie "$COOKIE_JAR" \
  --cookie-jar "$COOKIE_JAR" \
  https://httpbingo.org/cookies

El tarro se escribe cuando se completa la transferencia. Mantenlo en un sistema de archivos privado y elimínalo después del trabajo autorizado.

Comienza a Raspar con Scrapeless

¡Potencia tu flujo de trabajo de raspado web y automatización con Scrapeless!
Regístrate hoy y obtén $5 en crédito gratuitosin necesidad de tarjeta de crédito.

Reclama tu crédito gratuito ahora en el Tablero de Scrapeless.
Tablero de Scrapeless mostrando $5.00 en Créditos de Equipo


Múltiples Cookies y Reglas de Dominio/Ruta

El motor de cookies envía solo las cookies cuya ámbito coincide con la solicitud. Una línea de jar registra el dominio, si se incluyen subdominios, la ruta, la bandera Secure, la caducidad, el nombre y el valor.

La cookie de prueba pública capturada se veía así:

text Copy
#HttpOnly_httpbingo.org FALSE / TRUE 0 demo_session authorized

El prefijo #HttpOnly_ es el marcador de formato de archivo de curl para una cookie HttpOnly. FALSE significa que el dominio no incluye subdominios, / es la ruta que coincide, TRUE marca el transporte seguro y 0 representa una cookie de sesión sin marca de tiempo de caducidad persistente.

No amplíes un dominio o ruta para que una solicitud funcione. El ámbito es un límite de seguridad. Una cookie para un host de aplicación no debe copiarse a un host no relacionado, y una cookie restringida por ruta debe seguir siendo restringida por ruta.


Seguro, HttpOnly y SameSite

Los atributos de la cookie responden a diferentes preguntas, así que trátalos de forma independiente.

Atributo Lo que controla Implicación de curl
Secure Si la cookie viaja a través de transporte seguro curl no la enviará a través de HTTP simple
HttpOnly Si JavaScript del navegador puede leerla curl conserva el marcador en su jar
SameSite Si un navegador la envía en contextos de sitios cruzados un cliente HTTP de línea de comandos no reproduce el modelo completo de contexto de sitios de un navegador
Domain Qué ámbito de host puede recibirla curl coincide con el host de la solicitud
Path Qué rutas URL pueden recibirla curl coincide con la ruta de la solicitud

Para sesiones autorizadas, sigue los controles de gestión de sesiones de OWASP: protege los identificadores en reposo y en tránsito, gíralos a través de la aplicación y haz que la terminación sea efectiva del lado del servidor.


--verbose muestra los encabezados de solicitud salientes, incluyendo Cookie. Eso lo hace útil y peligroso.

Usa salida detallada solo en una terminal local privada con valores de demostración. En registros compartidos, confirma nombres y ámbito desde el jar mientras redactas valores:

bash Copy
awk 'BEGIN { FS="\t" } !/^#/ && NF >= 7 { print $1, $3, $6, "[REDACTED]" }' "$COOKIE_JAR"

Si el servidor devuelve 401, primero confirma que curl seleccionó la cookie esperada para el host y la ruta. Si el servidor devuelve 403, la sesión puede estar autenticada pero no autorizada para ese recurso. Ninguno de los estados justifica cambiar el ámbito de la cuenta o copiar la sesión de otro usuario.


Cuando curl No Es Suficiente

curl es un cliente HTTP, no un entorno de ejecución de navegador. No ejecuta JavaScript del lado del cliente, no renderiza un widget de inicio de sesión, no satisface una ceremonia de clave de acceso, ni permite que una persona apruebe un aviso de MFA.

Los flujos solo de navegador también dependen de un estado más allá de las cookies: almacenamiento de origen, trabajadores de servicio, solicitudes generadas por JavaScript, credenciales vinculadas a dispositivos y redirecciones interactivas. Reconstruir solo el encabezado Cookie puede producir una sesión incompleta o no válida.

Usa curl para flujos HTTP documentados y API controladas. Usa una sesión de navegador aprobada cuando la aplicación requiera comportamiento de navegador.


Continúa el Flujo de Trabajo Con Scrapeless

Scrapeless Scraping Browser proporciona un navegador en la nube para flujos de trabajo interactivos y renderizados con JavaScript. No convierte una cookie de curl no autorizada en acceso.

La transferencia segura es una sesión fresca: crea el navegador en la nube, deja que un operador autorizado complete cualquier inicio de sesión o límite de MFA requerido, luego mantiene el trabajo aprobado dentro de esa sesión. La conexión exacta de SDK requiere tu clave API de Scrapeless.

Nota: El siguiente bloque requiere SCRAPELESS_API_KEY y un objetivo autorizado. El entorno de verificación local confirmó la interfaz SDK instalada, pero no ejecutó una sesión en la nube autenticada.

javascript Copy
import { Playwright } from "@scrapeless-ai/sdk";

const browser = await Playwright.connect({
  apiKey: process.env.SCRAPELESS_API_KEY,
  sessionTTL: 300,
  proxyCountry: "US",
});

const context = await browser.newContext();
const page = await context.newPage();
await page.goto("https://app.example.com/login", {
  waitUntil: "domcontentloaded",
});

// An authorized operator completes any login, MFA, or passkey step here.
// Continue only within the account and scope approved for the workflow.

await browser.close();

La página del Navegador de Scraping Sin Residuos explica el límite del navegador administrado. Consulta los precios de Scrapeless, mantén el SDK alineado con la documentación de Scrapeless, y utiliza el flujo de trabajo de descarga de Puppeteer cuando el navegador deba producir un archivo en lugar de un cuerpo de respuesta HTTP.


Conclusión: Mantén el Estado de la Sesión Deliberado

Las cookies de curl son predecibles cuando separas el flujo en recibir, almacenar, coincidir, enviar y destruir. Usa -c para capturar el estado del servidor, -b para reutilizarlo, y un jar privado cuando más de un comando participe.

Cuando el flujo de trabajo cruce hacia JavaScript, autenticación interactiva o credenciales vinculadas al navegador, deja de tratar la sesión como un ejercicio de encabezado. Crea una sesión de navegador aprobada y mantén su alcance explícito.


Únete a nuestra comunidad para comparar patrones de manejo de sesiones con desarrolladores que construyen automatización autorizada: Discord · Telegram.

Regístrate en app.scrapeless.com para obtener tiempo de ejecución gratuito del Navegador de Scraping y mover pasos solo del navegador a una sesión administrada.


FAQ

P: ¿Qué hace curl -b?

curl -b habilita el motor de cookies y proporciona ya sea una cadena de cookie literal o un archivo de cookie para la solicitud.

P: ¿Qué hace curl -c?

curl -c escribe cookies elegibles en un jar de cookies cuando se completa la transferencia. Combínalo con -b cuando el mismo archivo deba ser leído y actualizado.

P: ¿Es seguro comprometer un jar de cookies de curl?

No. Un jar de cookies puede contener credenciales de sesión activas y debe permanecer fuera del control de versiones con permisos restrictivos en el sistema de archivos.

P: ¿Por qué curl no envía una cookie desde el jar?

La cookie puede haber expirado o puede no coincidir con el dominio, la ruta o los requisitos de transporte seguro de la solicitud. Inspecciona esos atributos sin imprimir el valor.

P: ¿Puede curl completar MFA o un inicio de sesión con clave de acceso?

No. La MFA interactiva y las ceremonias de clave de acceso requieren un navegador y, a menudo, una persona autorizada para aprobar el paso.

P: ¿Puede Scrapeless importar cada jar de cookies de curl?

No. Las sesiones de navegador pueden depender de más que cookies, por lo que el patrón general seguro es comenzar una nueva sesión de navegador autorizada y completar la autenticación requerida dentro de ella.

P: ¿Cuánta concurrencia debe usar un flujo de trabajo de sesión?

No mantengas más de tres trabajadores por host hasta que el propietario de la aplicación apruebe un límite diferente, y aísla el estado de sesión de cada trabajador.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar