Qué es curl y cómo usarlo en el terminal

Autor: 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?

Lee también

Descubre cómo PHP-FPM atiende peticiones PHP, en qué se diferencia de un servidor web y cómo ajustar sus procesos al tráfico y los recursos.
Conoce BIND, el software abierto de servidor DNS: sus funciones, cómo gestiona dominios y cuándo conviene instalarlo por tu cuenta.
Descubre qué son el registro REGON de Polonia y su número, en qué se diferencian de NIP y KRS y cómo verificar los datos de una empresa.