Qué es curl y cómo usarlo en el terminal
Autor: Redacción Domeny.ForSale Publicado
En resumen: curl es una herramienta de línea de comandos que permite transferir datos entre un ordenador y un servidor. Sirve, entre otras cosas, para descargar un archivo, comprobar la respuesta de una página y enviar datos a una API, es decir, una interfaz que permite la comunicación entre programas. Funciona sin un navegador gráfico, por lo que resulta útil para el diagnóstico y la automatización.
¿Para qué sirve curl y en qué se diferencia de un navegador?
curl se ejecuta en el terminal: introduces un comando, una dirección y, si lo necesitas, parámetros que determinan cómo debe funcionar. La herramienta admite distintos protocolos de comunicación, entre ellos HTTP y HTTPS, utilizados por las páginas web. En la práctica, suele emplearse para comprobar servicios web y trabajar con API.
Un navegador descarga la página, interpreta su código y muestra la interfaz. Por defecto, curl muestra los datos recibidos en el terminal: por ejemplo, código HTML o una respuesta en JSON, un formato de datos de texto utilizado por muchas API. No ejecuta JavaScript ni renderiza la página, por lo que no sustituye las pruebas de su aspecto y funcionamiento en un navegador.
Por ejemplo, si un formulario de una página no funciona, curl puede ayudar a comprobar si el servidor acepta la petición y cómo responde a ella. Sin embargo, no mostrará si el botón del formulario está correctamente conectado al código JavaScript.
curl está vinculado a la biblioteca libcurl, que los desarrolladores pueden utilizar en sus propias aplicaciones. El comando curl es un programa listo para usar; libcurl es un conjunto de funciones para crear software que transfiera datos.
¿Cómo comprobar si la herramienta está disponible y realizar la primera petición?
Abre el terminal e introduce:
curl --version
Si curl está disponible, verás el número de versión e información sobre las funciones compatibles. Si el sistema no reconoce el comando, instala la herramienta mediante el gestor de paquetes de tu sistema o siguiendo las instrucciones oficiales del proyecto curl. Los protocolos y las opciones disponibles pueden depender de la versión y de cómo se haya compilado el programa.
En algunos entornos antiguos de Windows PowerShell, el nombre curl puede hacer referencia a otro comando. En ese caso, utiliza curl.exe para ejecutar el programa correcto.
La petición más sencilla tiene este aspecto:
curl https://example.com
Para una dirección HTTP o HTTPS, curl realiza por defecto una petición GET, es decir, una solicitud para obtener un recurso. Escribe la respuesta en la salida estándar, normalmente el terminal. Pon entre comillas las direcciones que contengan caracteres especiales, como &, para que el intérprete de comandos no los trate como parte de su propia sintaxis.
¿Cómo comprobar las cabeceras y las redirecciones?
Las cabeceras HTTP son información que acompaña a una petición o una respuesta, como el tipo de contenido transferido y las instrucciones relativas a la caché. Para solicitar al servidor únicamente las cabeceras de la respuesta, utiliza:
curl -I https://example.com
La opción -I envía una petición HEAD. No todos los servidores la procesan del mismo modo que GET. Si quieres ver las cabeceras de la respuesta a una descarga normal de la página junto con su contenido, utiliza -i.
Por defecto, curl no sigue las redirecciones HTTP. La opción -L permite acceder a la dirección indicada por el servidor:
curl -i -L https://example.com
El código 200 suele indicar una respuesta correcta; 404, que el recurso no se encuentra; y 500, un error del servidor. Sin embargo, el código por sí solo no demuestra que la página funcione correctamente: una respuesta 200 puede contener un mensaje de error en lugar de los datos esperados.
Para un diagnóstico más detallado, utiliza -v, que muestra, entre otras cosas, los detalles de la conexión y las cabeceras intercambiadas. Antes de compartir ese registro, elimina los tokens, las cookies y cualquier otra información confidencial.
¿Cómo descargar un archivo y enviar datos a una API?
Para guardar la respuesta en un archivo en lugar de mostrarla en el terminal, utiliza la opción -o:
curl -f -L -o documento.pdf https://example.com/dokument.pdf
Es un ejemplo de sintaxis: el archivo indicado no tiene por qué existir. -o establece el nombre local del archivo, -L gestiona las redirecciones y -f hace que se notifique un error cuando una respuesta HTTP indica un fallo, por lo general a partir del código 400. Sin -f, curl puede terminar con éxito aunque haya recibido una página de error. Guardar la respuesta en un archivo existente puede sobrescribir su contenido.
El envío de datos a una API puede hacerse así:
curl -i https://api.example.com/items -H "Content-Type: application/json" --data '{"name":"test"}'
La opción -H añade una cabecera, mientras que --data proporciona el cuerpo de la petición y selecciona por defecto el método POST, utilizado a menudo para enviar datos. Este ejemplo presupone un terminal compatible con la sintaxis del intérprete de comandos Bash; las reglas para usar comillas en Windows pueden ser distintas. Consulta la documentación de la API concreta para conocer la dirección real, los campos obligatorios y el método de autenticación.
¿Cómo usar curl de forma segura?
curl no solo puede leer datos, sino también ejecutar operaciones que modifiquen el estado de un servicio. Antes de ejecutar un comando ajeno, comprueba la dirección de destino, los datos que se envían y las opciones. Una llamada a una API puede crear un registro, eliminar un recurso o iniciar una operación de pago.
No utilices habitualmente la opción -k o --insecure: desactiva la verificación del certificado TLS, que ayuda a confirmar la identidad del servidor. Es mejor averiguar la causa de un error de certificado que ocultarlo. Tampoco ejecutes un script descargado sin revisar su contenido, especialmente mediante un comando que conecte curl directamente con el intérprete de comandos.
Para empezar, consulta un recurso público mediante curl -i, revisa el código de respuesta y las cabeceras, y solo después pasa a las peticiones que envían datos.
Consulta también: ¿Qué es una API?
