Introducción
Bienvenido al laboratorio de transferencia de datos de URL en Linux. En este laboratorio, aprenderá cómo transferir datos utilizando URLs en sistemas Linux. Esta es una habilidad fundamental para administradores de sistemas, desarrolladores y profesionales de seguridad.
La herramienta principal que aprenderemos es curl, una poderosa utilidad de línea de comandos para transferir datos con sintaxis de URL. Aprenderá cómo recuperar datos de sitios web, guardar contenido en archivos, utilizar diferentes métodos HTTP y personalizar sus solicitudes con diversas opciones.
Al final de este laboratorio, tendrá experiencia práctica con técnicas esenciales de transferencia de datos que se utilizan comúnmente en escenarios del mundo real.
Comprendiendo los conceptos básicos de curl
curl es una herramienta de línea de comandos para transferir datos con sintaxis de URL. Admite numerosos protocolos, incluyendo HTTP, HTTPS, FTP y muchos más. En este paso, aprenderá el uso básico de curl para recuperar contenido web.
Comencemos abriendo una terminal. La terminal ya debería estar en el directorio /home/labex/project. Si no es así, puede cambiar a este directorio utilizando:
cd ~/project
Su primer comando curl
Comencemos utilizando curl para recuperar contenido de un sitio web. Escriba el siguiente comando:
curl http://example.com
Después de ejecutar este comando, debería ver el contenido HTML de example.com mostrado en su terminal. Esta salida incluye etiquetas HTML y todo el contenido de la página web. La salida debería ser similar a esta:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents...</p>
...
</div>
</body>
</html>
Esto demuestra el uso más básico de curl: recuperar el contenido de una URL y mostrarlo directamente en la terminal.
Comprender la salida
La salida que ve es la respuesta HTML sin procesar del servidor. Cuando visita un sitio web utilizando un navegador, el navegador interpreta este HTML y lo muestra como una página web formateada. Sin embargo, curl simplemente le muestra el contenido sin procesar.
Intentemos otro ejemplo para ver un contenido diferente. Ejecute:
curl https://httpbin.org/json
Esta vez, debería ver una respuesta JSON. La salida debería ser como esta:
{
"slideshow": {
"author": "Yours Truly",
"date": "date of publication",
"slides": [
{
"title": "Wake up to WonderWidgets!",
"type": "all"
},
{
"items": [
"Why <em>WonderWidgets</em> are great",
"Who <em>buys</em> WonderWidgets"
],
"title": "Overview",
"type": "all"
}
],
"title": "Sample Slide Show"
}
}
Como puede ver, curl puede recuperar diferentes tipos de contenido dependiendo de lo que el servidor proporcione.
Guardar la salida en archivos
En muchos casos, es posible que desee guardar el contenido que recupera en lugar de simplemente verlo en la terminal. En este paso, aprenderá cómo guardar la salida de curl en archivos.
Guardar utilizando redirección de salida
La forma más sencilla de guardar la salida de un comando curl es utilizando la redirección con el operador >. Ejecute el siguiente comando:
curl http://example.com > example.html
Este comando recupera el contenido de example.com y lo guarda en un archivo llamado example.html en su directorio actual. Para verificar que se ha creado el archivo, ejecute:
ls -l example.html
Debería ver el archivo enumerado con su tamaño y otros detalles.
Para comprobar el contenido del archivo, puede utilizar el comando cat:
cat example.html
Debería ver el mismo contenido HTML que se mostró anteriormente en la terminal.
Utilizar la opción -o de curl
curl proporciona una opción específica -o (o --output) para guardar el contenido recuperado en un archivo. Esto es especialmente útil cuando la redirección de salida puede causar problemas. Intentémoslo:
curl -o httpbin_data.json https://httpbin.org/json
Este comando guarda los datos JSON de httpbin.org en un archivo llamado httpbin_data.json. Verifique la creación del archivo con:
ls -l httpbin_data.json
Y compruebe su contenido con:
cat httpbin_data.json
Crear un directorio de datos
Es una buena práctica organizar sus archivos. Vamos a crear un directorio de datos dedicado (si aún no existe) y guardar algún contenido allí:
mkdir -p data
curl -o data/google_data.txt http://www.google.com
El comando mkdir -p crea el directorio data si aún no existe. La opción -p garantiza que no se informe ningún error si el directorio ya existe.
Ahora, verifique que se ha creado el archivo en el directorio de datos:
ls -l data/google_data.txt
Debería ver el archivo enumerado con sus detalles.
Opciones avanzadas de curl
curl ofrece muchas opciones que le permiten personalizar sus solicitudes. En este paso, aprenderá sobre algunas de las opciones más útiles.
Modo detallado
La opción -v (o --verbose) le indica a curl que muestre información detallada sobre la solicitud y la respuesta. Esto es especialmente útil para depurar. Ejecute:
curl -v http://example.com
Debería ver mucha información, incluyendo:
- Los encabezados de solicitud enviados por curl
- Detalles de la conexión
- Encabezados de respuesta del servidor
- El contenido real de la respuesta
La salida se parecerá a esto (aunque algunos detalles variarán):
* Trying 93.184.216.34:80...
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 578793
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 26 Dec 2023 13:45:32 GMT
< Etag: "3147526947+ident"
< Expires: Tue, 02 Jan 2024 13:45:32 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (dcb/7F83)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
<
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
Las líneas que comienzan con * son mensajes informativos de curl mismo.
Las líneas que comienzan con > son encabezados de solicitud.
Las líneas que comienzan con < son encabezados de respuesta.
El contenido real sigue a los encabezados de respuesta.
Encabezados personalizados
A veces, necesita enviar encabezados específicos con su solicitud. Puede usar la opción -H (o --header) para esto. Intentemos establecer un User-Agent personalizado:
curl -H "User-Agent: MyCustomClient/1.0" https://httpbin.org/user-agent
Este comando envía una solicitud a httpbin.org con un encabezado User-Agent personalizado. La respuesta debería confirmar que se recibió su User-Agent personalizado:
{
"user-agent": "MyCustomClient/1.0"
}
Seguir redirecciones
Por defecto, curl no sigue las redirecciones HTTP. Puede usar la opción -L (o --location) para que siga las redirecciones. Intentemos:
curl -L http://github.com
Sin la opción -L, solo obtendría una respuesta de redirección. Con -L, curl sigue la redirección y le muestra el contenido del destino final.
Vamos a crear un archivo en el directorio de datos para practicar con estas opciones:
curl -v -L -o data/redirect_example.txt http://github.com
Este comando:
- Utiliza el modo detallado (
-v) - Sigue las redirecciones (
-L) - Guarda la salida en
data/redirect_example.txt - Solicita el contenido de github.com
Verifique que se haya creado el archivo:
ls -l data/redirect_example.txt
Debería ver el archivo enumerado con sus detalles.
Métodos HTTP y envío de datos
curl admite varios métodos HTTP más allá del método GET predeterminado. En este paso, aprenderá cómo utilizar diferentes métodos HTTP y enviar datos con sus solicitudes.
Utilizar el método POST
El método POST se utiliza comúnmente para enviar datos a un servidor. Puede utilizar la opción -X para especificar el método HTTP y la opción -d para proporcionar los datos. Intentemos:
curl -X POST -d "name=John&age=25" https://httpbin.org/post
Este comando envía una solicitud POST con datos de formulario a httpbin.org. La respuesta debería devolver los datos que envió:
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "25",
"name": "John"
},
"headers": {
"Accept": "*/*",
"Content-Length": "16",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": null,
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
Enviar datos JSON
Para enviar datos JSON, debe especificar el encabezado Content-Type. Ejecute:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":25}' https://httpbin.org/post
La respuesta debería incluir sus datos JSON:
{
"args": {},
"data": "{\"name\":\"John\",\"age\":25}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "24",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": {
"age": 25,
"name": "John"
},
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
Utilizar otros métodos HTTP
curl admite todos los métodos HTTP estándar. Intentemos una solicitud PUT:
curl -X PUT -d "data=example" https://httpbin.org/put
También puede probar una solicitud DELETE:
curl -X DELETE https://httpbin.org/delete
Cada uno de estos comandos devolverá una respuesta que muestra los detalles de su solicitud.
Vamos a guardar la salida de una solicitud POST en un archivo:
curl -X POST -d "name=John&age=25" -o data/post_response.json https://httpbin.org/post
Verifique que se haya creado el archivo:
ls -l data/post_response.json
Y compruebe su contenido:
cat data/post_response.json
Debería ver la respuesta JSON de httpbin.org, similar a lo que se mostró anteriormente.
Descarga de archivos y monitoreo de progreso
curl es excelente para descargar archivos de Internet. En este paso, aprenderá cómo descargar archivos y monitorear el progreso de la descarga.
Descarga básica de archivos
Para descargar un archivo, puede usar la opción -o que aprendimos anteriormente. Descarguemos una imagen de muestra:
curl -o data/sample.jpg https://httpbin.org/image/jpeg
Este comando descarga una imagen JPEG de httpbin.org y la guarda como sample.jpg en el directorio de datos.
Verifique que el archivo se haya descargado:
ls -l data/sample.jpg
Descarga con barra de progreso
Para descargas más grandes, es útil ver el progreso. Puede usar la opción -# para mostrar una barra de progreso:
curl -## -o data/sample_with_progress.jpg https://httpbin.org/image/jpeg
Debería ver una barra de progreso como esta:
######################################################################### 100.0%
Uso de la opción de archivo de salida con nombre automático
Si desea usar el mismo nombre de archivo que el archivo remoto, puede usar la opción -O (O mayúscula):
cd data
curl -O https://httpbin.org/image/jpeg
cd ..
Esto descarga el archivo y lo guarda como jpeg (la última parte de la URL) en el directorio de datos.
Verifique que el archivo se haya descargado:
ls -l data/jpeg
Reanudación de descargas interrumpidas
Si una descarga se interrumpe, puede reanudarla usando la opción -C -:
curl -C - -o data/resume_example.jpg https://httpbin.org/image/jpeg
Esto le indica a curl que determine automáticamente desde dónde reanudar la descarga.
Limitación de la velocidad de descarga
Puede limitar la velocidad de descarga usando la opción --limit-rate:
curl --limit-rate 100K -o data/rate_limited.jpg https://httpbin.org/image/jpeg
Esto limita la velocidad de descarga a 100 KB/s.
Descarga de múltiples archivos
Puede descargar múltiples archivos con un solo comando:
curl -o data/image1.jpg https://httpbin.org/image/jpeg -o data/image2.png https://httpbin.org/image/png
Esto descarga una imagen JPEG y una imagen PNG y las guarda como image1.jpg y image2.png respectivamente.
Verifique que ambos archivos se hayan descargado:
ls -l data/image1.jpg data/image2.png
Resumen
En este laboratorio, has aprendido cómo usar curl, una poderosa herramienta de línea de comandos para transferir datos a través de URLs. Ahora tienes experiencia práctica en:
- Uso básico de curl para recuperar contenido web
- Guardar la salida de curl en archivos utilizando redirección y la opción
-o - Utilizar opciones avanzadas de curl como el modo detallado (
-v), encabezados personalizados (-H) y seguir redirecciones (-L) - Trabajar con diferentes métodos HTTP (GET, POST, PUT, DELETE) y enviar datos
- Descargar archivos y monitorear el progreso de la descarga
Estas habilidades son esenciales para muchas tareas en administración de sistemas, desarrollo web, pruebas de API y scripts de automatización. El comando curl se utiliza ampliamente en diversos campos técnicos y está disponible en prácticamente todas las distribuciones de Linux, macOS e incluso en Windows.
A medida que continúes tu viaje en Linux y redes, recuerda que curl tiene muchas más opciones y capacidades de las que cubrimos en este laboratorio. Siempre puedes consultar el manual de curl (man curl) para obtener más información.



