curl
Transfiere datos hacia o desde una URL y muestra la respuesta.
Manda peticiones a una URL y te muestra la respuesta en la terminal. Lo usas para descargar archivos, ver las cabeceras de una página o probar una API sin abrir el navegador.
curl [opciones] URLCon -o o -O sobrescribe sin avisar el archivo local que tenga el mismo nombre. Y nunca corras curl URL | bash con scripts que no revisaste: ejecutas lo que sea que mande el servidor.
Despiece
6 ejemplosVer el contenido de una página
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | curl | Comando | El comando para transferir datos con URLs. |
| 2 | https://example.com | Argumento | La URL a la que le haces la petición. |
Imprime el HTML de example.com en la terminal.
Ver solo las cabeceras
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | curl | Comando | El comando para transferir datos con URLs. |
| 2 | -I | Opción | Pide solo las cabeceras, no el contenido. |
| 3 | https://example.com | Argumento | La URL a la que le haces la petición. |
Muestra el código de estado (200, 404), el tipo de contenido y el resto de cabeceras del servidor.
Guardar la respuesta en un archivo
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | curl | Comando | El comando para transferir datos con URLs. |
| 2 | -o | Opción | Guarda la respuesta en un archivo. |
| 3 | pagina.html | Argumento | El nombre del archivo donde se guarda el contenido. |
| 4 | https://example.com | Argumento | La URL a la que le haces la petición. |
Descarga el HTML y lo deja guardado como pagina.html en la carpeta actual.
Descargar un archivo con su nombre original
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | curl | Comando | El comando para transferir datos con URLs. |
| 2 | -L | Opción | Sigue las redirecciones del servidor. |
| 3 | -O | Opción | Guarda el archivo usando su nombre remoto. |
| 4 | https://curl.se/download/curl-8.5.0.tar.gz | Argumento | La URL del archivo; cámbiala por la que vayas a descargar. |
Descarga el archivo y lo guarda como curl-8.5.0.tar.gz en la carpeta actual, con una barra de progreso mientras baja.
Enviar datos de un formulario
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | curl | Comando | El comando para transferir datos con URLs. |
| 2 | -d | Opción | Envía los datos como si los mandara un formulario. |
| 3 | 'nombre=juan&ciudad=cdmx' | Argumento | Los campos van separados por &. Las comillas evitan que el shell interprete el & y parta el comando. |
| 4 | https://httpbin.org/post | Argumento | Un servicio de prueba que te devuelve lo que le mandas. |
Te regresa en JSON los datos que enviaste, para comprobar que la petición salió bien.
Mandar datos JSON a una API
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | curl | Comando | El comando para transferir datos con URLs. |
| 2 | -H | Opción | Agrega una cabecera a la petición. |
| 3 | 'Content-Type: application/json' | Argumento | Le dice al servidor que el cuerpo es JSON. |
| 4 | -d | Opción | El cuerpo de la petición, enviado como POST. |
| 5 | '{"nombre":"juan"}' | Argumento | El JSON con los datos, entre comillas simples para que el shell no lo interprete. |
| 6 | https://httpbin.org/post | Argumento | Un servicio de prueba que te devuelve lo que le mandas. |
Hace un POST con una cabecera JSON y httpbin.org te confirma que recibió el JSON.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -o ARCHIVO--output | Guarda la respuesta en un archivo con el nombre que le des. |
| -O--remote-name | Guarda la respuesta usando el nombre del archivo remoto. |
| -L--location | Sigue las redirecciones hasta llegar al destino final. |
| -I--head | Solo muestra las cabeceras de la respuesta, sin el contenido. |
| -d DATOS--data | Envía datos en el cuerpo de la petición. Al usarlo, curl cambia el método a POST solo. |
| -H CABECERA--header | Agrega una cabecera personalizada a la petición. |
Fallas comunes
| Falla | Remedio |
|---|---|
| No entrecomillar una URL que tiene & o ?. | El shell interpreta esos caracteres y parte el comando. Envuelve la URL en comillas, por ejemplo curl "https://sitio.com/datos?a=1&b=2". |
| Olvidar -L con una URL que redirige. | Sin -L solo ves el aviso de movimiento o una página vacía. Agrega -L para que curl siga la redirección hasta el destino. |
| Confundir -o con -O. | -o (minúscula) lleva el nombre que tú eliges: curl -o foto.png URL. -O (mayúscula) no lleva nombre y usa el del archivo remoto. Si escribes -O foto.png URL, curl trata foto.png como otra URL. |
| Poner -X POST cuando solo querías enviar datos de formulario. | -d ya hace el POST por ti; con -X POST solo recibes un aviso de que sobra. -X lo necesitas para otros métodos, como -X PUT o -X DELETE. |
Preguntas frecuentes
- ¿Cómo descargo un archivo con curl?
- Usa curl -o nombre.png https://sitio.com/imagen.png para guardarlo con el nombre que quieras, o -O para conservar el nombre original del archivo remoto.
- ¿Cuál es la diferencia entre curl y wget?
- curl es más flexible con cabeceras, métodos y APIs, y sirve también para probar endpoints. wget es más directo para descargar archivos y descargas recursivas de sitios.
- ¿Cómo veo solo las cabeceras de una página con curl?
- Usa curl -I https://sitio.com. Muestra el código de respuesta, el tipo de contenido, el servidor y las demás cabeceras sin bajar todo el contenido.
- ¿Cómo envío datos con curl en un POST?
- Utiliza -d con los campos: curl -d 'usuario=juan' https://sitio.com/form. Si la API espera JSON, combina -H 'Content-Type: application/json' con -d '{"clave":"valor"}'.
- ¿Qué significa curl: (6) Could not resolve host?
- Que curl no pudo convertir el nombre del sitio en una IP. Casi siempre es la URL mal escrita, falta de conexión o un problema de DNS. Prueba con ping -c 1 8.8.8.8: si responde, tu red funciona y el problema es el nombre o el DNS.