Comandos LinuxExplicados en español
/
Ficha57 / 104
Categoría
Redes
Ejemplos
6
Ver también
ping · scp · ssh

curl

Client for URL (cliente para URLs)

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.

Sintaxiscurl [opciones] URL
Precaución

Con -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.

§ 1

Despiece

6 ejemplos
Ver el contenido de una página

Ver el contenido de una página

2 piezas
Lámina01 / 06
Comandocurl https://example.com
Piezas2
Escala1:1
N.ºPiezaTipoQué hace
1curlComandoEl comando para transferir datos con URLs.
2https://example.comArgumentoLa URL a la que le haces la petición.
Resultado

Imprime el HTML de example.com en la terminal.

Ver solo las cabeceras

3 piezas
Lámina02 / 06
Comandocurl -I https://example.com
Piezas3
Escala1:1
N.ºPiezaTipoQué hace
1curlComandoEl comando para transferir datos con URLs.
2-IOpciónPide solo las cabeceras, no el contenido.
3https://example.comArgumentoLa URL a la que le haces la petición.
Resultado

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

4 piezas
Lámina03 / 06
Comandocurl -o pagina.html https://example.com
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1curlComandoEl comando para transferir datos con URLs.
2-oOpciónGuarda la respuesta en un archivo.
3pagina.htmlArgumentoEl nombre del archivo donde se guarda el contenido.
4https://example.comArgumentoLa URL a la que le haces la petición.
Resultado

Descarga el HTML y lo deja guardado como pagina.html en la carpeta actual.

Descargar un archivo con su nombre original

4 piezas
Lámina04 / 06
Comandocurl -L -O https://curl.se/download/curl-8.5.0.tar.gz
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1curlComandoEl comando para transferir datos con URLs.
2-LOpciónSigue las redirecciones del servidor.
3-OOpciónGuarda el archivo usando su nombre remoto.
4https://curl.se/download/curl-8.5.0.tar.gzArgumentoLa URL del archivo; cámbiala por la que vayas a descargar.
Resultado

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

4 piezas
Lámina05 / 06
Comandocurl -d 'nombre=juan&ciudad=cdmx' https://httpbin.org/post
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1curlComandoEl comando para transferir datos con URLs.
2-dOpciónEnvía los datos como si los mandara un formulario.
3'nombre=juan&ciudad=cdmx'ArgumentoLos campos van separados por &. Las comillas evitan que el shell interprete el & y parta el comando.
4https://httpbin.org/postArgumentoUn servicio de prueba que te devuelve lo que le mandas.
Resultado

Te regresa en JSON los datos que enviaste, para comprobar que la petición salió bien.

Mandar datos JSON a una API

6 piezas
Lámina06 / 06
Comandocurl -H 'Content-Type: application/json' -d '{"nombre":"juan"}' https://httpbin.org/post
Piezas6
Escala1:1
N.ºPiezaTipoQué hace
1curlComandoEl comando para transferir datos con URLs.
2-HOpciónAgrega una cabecera a la petición.
3'Content-Type: application/json'ArgumentoLe dice al servidor que el cuerpo es JSON.
4-dOpciónEl cuerpo de la petición, enviado como POST.
5'{"nombre":"juan"}'ArgumentoEl JSON con los datos, entre comillas simples para que el shell no lo interprete.
6https://httpbin.org/postArgumentoUn servicio de prueba que te devuelve lo que le mandas.
Resultado

Hace un POST con una cabecera JSON y httpbin.org te confirma que recibió el JSON.

§ 2

Opciones

Las que sí vas a usar
OpciónQué hace
-o ARCHIVO--outputGuarda la respuesta en un archivo con el nombre que le des.
-O--remote-nameGuarda la respuesta usando el nombre del archivo remoto.
-L--locationSigue las redirecciones hasta llegar al destino final.
-I--headSolo muestra las cabeceras de la respuesta, sin el contenido.
-d DATOS--dataEnvía datos en el cuerpo de la petición. Al usarlo, curl cambia el método a POST solo.
-H CABECERA--headerAgrega una cabecera personalizada a la petición.
§ 3

Fallas comunes

FallaRemedio
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.
§ 4

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.
§ 5

Ver también