Transferencia de datos de URL en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/PackagesandSoftwaresGroup -.-> linux/curl("URL Data Transferring") subgraph Lab Skills linux/ls -.-> lab-271257{{"Transferencia de datos de URL en Linux"}} linux/cat -.-> lab-271257{{"Transferencia de datos de URL en Linux"}} linux/cd -.-> lab-271257{{"Transferencia de datos de URL en Linux"}} linux/mkdir -.-> lab-271257{{"Transferencia de datos de URL en Linux"}} linux/curl -.-> lab-271257{{"Transferencia de datos de URL en Linux"}} end

Comprender 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:

  1. Utiliza el modo detallado (-v)
  2. Sigue las redirecciones (-L)
  3. Guarda la salida en data/redirect_example.txt
  4. 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 del 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:

  1. Uso básico de curl para recuperar contenido web
  2. Guardar la salida de curl en archivos utilizando redirección y la opción -o
  3. Utilizar opciones avanzadas de curl como el modo detallado (-v), encabezados personalizados (-H) y seguir redirecciones (-L)
  4. Trabajar con diferentes métodos HTTP (GET, POST, PUT, DELETE) y enviar datos
  5. 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.