Cómo usar el comando Curl en Linux

Una guía extensa que explica el uso del comando curl para buscar páginas web y descargar archivos directamente desde su terminal

El rizo command es una utilidad de línea de comandos más interesante que Linux tiene para ofrecerle. rizo El comando permite al usuario recuperar archivos del servidor.

rizo es una opción popular entre los desarrolladores de aplicaciones y los usuarios frecuentes de Linux debido a su compatibilidad con varios protocolos como RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, HTTP, HTTPS, FTP, FTPS, IMAP, IMAPS, DICT, FILE, GOPHER, LDAP, LDAPS, POP3, POP3S, etc.

rizo El comando hace mucho más que buscar las páginas web por usted. Conocer las opciones disponibles con este comando lo hace más versátil para su uso. Vamos a sumergirnos en el tutorial para comprender bien el uso de rizo comando usando algunos ejemplos breves.

Instalación

Antes de usar el rizo comando, verifique si ya está instalado en su sistema. Usa el comando curl --version para comprobar si rizo esta instalado.

En caso de que rizo no está instalado, siga los siguientes pasos.

En sistemas basados ​​en Ubuntu y Debian, usar:

sudo apt-get update
sudo apt-get install curl

En las distribuciones RHEL, CentOs y Fedora, usar:

sudo yum instalar curl

Ahora usa el curl --version comando para asegurarse de que esté instalado correctamente.

curl --version

Producción:

curl 7.58.0 (x86_64-pc-linux-gnu) libcurl / 7.58.0 OpenSSL / 1.1.1 zlib / 1.2.11 libidn2 / 2.0.4 libpsl / 0.19.1 (+ libidn2 / 2.0.4) nghttp2 / 1.30. 0 librtmp / 2.3 Fecha de publicación: 2018-01-24 Protocolos: archivo dict ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp Características: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_W libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL gaurav @ ubuntu: ~ $ 

Ahora estamos listos para usar el rizo mando.

Opciones disponibles con el comando CURL

Primero echemos un vistazo a algunas de las opciones destacadas disponibles con el rizo mando.

OpciónDescripción
-upara descargar archivos de un servidor FTP
-Cpara reanudar una descarga interrumpida
-opara guardar el resultado de la rizo comando con un nombre de archivo predefinido
-Ipara obtener los encabezados HTTP de una URL definida
-Opara guardar el resultado de la rizo comando con el nombre de archivo original
--libcurlpara generar el código fuente de C que usa libcurl para la opción especificada
-Xutilizar un proxy para acceder a la URL
-#para mostrar la barra de progreso para mostrar el estado de la descarga

Recuperar una página web usando CURL

El rizo comando, cuando se utiliza sin ninguna opción, obtiene el contenido de la URL especificada en el comando.

Sintaxis:

curl [URL]

Ejemplo:

curl //todas.how

Producción:

gaurav @ ubuntu: ~ $ curl //todas las cosas.how html {overflow-x: hidden! important} html.i-amphtml-fie {height: 100%! important; width: 100%! important} html: not ([amp4ads ]), html: not ([amp4ads]) body {height: auto! important} html: not ([amp4ads]) body {margin: 0! important} body {-webkit-text-size-adjust: 100%; - ajuste-tamaño-texto-moz: 100%; - ajuste-tamaño-texto-ms: 100%; ajuste-tamaño-texto: 100%} html.i-amphtml-singledoc.i-amphtml-embedded {-ms-touch -action: pan-y; touch-action: pan-y} html.i-amphtml-fie> body, html.i-amphtml-singledoc> body {overflow: visible! important} html.i-amphtml-fie: not (.i-amphtml-inabox)> cuerpo, html.i-amphtml-singledoc: not (.i-amphtml-inabox)> cuerpo {posición: relativa! importante} html.i-amphtml-webview> cuerpo {desbordamiento-x : hidden! important; overflow-y: visible! important; min-height: 100vh! important} html.i-amphtml-ios-embed-legacy> body {overflow-x: hidden! important; overflow-y: auto! important ; posición: absoluta! importante} html.i-amphtml-ios-embed {desbordamiento-y: auto! importante; posición: estática} # i-amphtml-wrapper {desbordamiento-x: oculto! importante; sobre flow-y: auto! importante; posición: absoluta! importante; arriba: 0! importante; izquierda: 0! importante; derecha: 0! importante; abajo: 0! importante; margen: 0! importante; pantalla: bloque! importante} html.i-amphtml-ios-embed.i-amphtml-ios-overscroll, html.i-amphtml-ios-embed.i-amphtml-ios-overscroll> # i-amphtml-wrapper {-webkit-overflow-scrolling: touch! important} # i-amphtml-wrapper> cuerpo {posición: relativa! importante; borde-superior: 1px sólido transparente! importante} # i-amphtml-wrapper + cuerpo {visibilidad: visible} # i-amphtml-wrapper + cuerpo .i-amphtml-lightbox-element, # i-amphtml-wrapper + cuerpo [i-amphtml-lightbox] {visibilidad: oculta} # i-amphtml-wrapper + cuerpo [i-amphtml-lightbox] .i-amphtml-lightbox -elemento {visibilidad: visible} # i-amphtml-wrapper.i-amphtml-scroll-disabled, .i-amphtml-scroll-disabled {overflow-x: hidden! important; overflow-y: hidden! important} amp-instagram {padding: 54px 0px 0px! important; background-color: #fff} iframe amp-iframe {box-sizing: border-box! important} [amp-access] [amp-access-hide] {display: none} [suscripciones -dialog], cuerpo: no (.i-amphtml-s ubs-ready) [subscriptions-action], body: not (.i-amphtml-subs-ready) [subscriptions-section] {display: none! important} amp-experiment, amp-live-list> [update] {display : ninguno} .i-amphtml-jank-meter {posición: fija; color de fondo: rgba (232,72,95,0.5); abajo: 0; derecha: 0; color: #fff; tamaño de fuente: 16px; z-index: 1000; padding: 5px} amp-list [resizable-children]>. i-amphtml-loading-container.amp-hidden {display: none! important} amp-list [fetch-error], amp-list [load-more] [load-more-button], amp-list [load-more] [load-more-end], amp-list [load-more] [load-more-failed], amp-list [cargar -más] [load-more-loading] {display: none} amp-list [diffable] div [role = list] {display: block} amp-story-page, amp-story [independiente] {min-height: 1px ! importante; display: block! important; height: 100%! important; margin: 0! important; padding: 0! important; overflow: hidden! important; width: 100%! important} amp-story [standalone] {background- color: # 202125! importante; posición: relativo! importante} amp-story-page {background-color: # 757575} amp-story .amp-active> div, amp-story .i-amphtm l-loader-background {display: none! important} amp-story-page: not (: first-of-type): not ([distance]): not ([active]) {transform: translateY (1000vh)! important } amp-autocomplete {posición: relativa! importante; pantalla: inline-block! importante} amp-autocomplete> input, amp-autocomplete> textarea {padding: 0.5rem; border: 1px solid rgba (0,0,0,0.33) } .i-amphtml-autocomplete-results, amp-autocomplete> input, amp-autocomplete> textarea {tamaño de fuente: 1rem; altura de línea: 1.5rem} [amp-fx ^ = fly-in] {visibilidad: oculta} amp-script [nodom] {posición: fijo! importante; arriba: 0! importante; ancho: 1px! importante; alto: 1px! importante; desbordamiento: oculto! importante; visibilidad: oculto} 

Aquí, el contenido de la página web se obtiene directamente a su terminal como código fuente.

Puedes usar opciones -o y -O con el rizo comando para almacenar este contenido en un archivo.

Cuándo -o se utiliza la opción, el contenido de la URL se guarda en su directorio actual con un nombre de archivo definido por el usuario.

Sintaxis:

curl -o [nombre_archivo_definido_usuario] [URL]

Ejemplo:

gaurav @ ubuntu: ~ / workspace $ curl -o ath.html //allthings.how% Total% Received% Xferd Velocidad promedio Tiempo Tiempo Tiempo Carga de descarga actual Velocidad total gastada izquierda 100 199k 100 199k 0 0 58743 0 0:00:03 0:00:03 -: -: - 58743 gaurav @ ubuntu: ~ / espacio de trabajo $ ls ath.html gaurav @ ubuntu: ~ / espacio de trabajo $ 

En este ejemplo, el contenido de la URL "allthings.how" se guarda como un archivo HTML llamado ath.html en mi directorio de trabajo actual. Al abrir este archivo HTML, seré redirigido a la página web que está guardada.

Descarga de archivos usando el comando CURL

Utilizando el -O La opción con el comando curl también guarda el contenido o la página web o un paquete descargable como un archivo, pero guarda este archivo con su nombre original.

Veamos esto a través de un ejemplo:

Ejemplo:

Aquí he usado el rizo comando con -O opción para descargar un paquete de Ubuntu llamado "cherrytree_0.37.6-1.1_all.deb'Del repositorio de paquetes de Ubuntu.

gaurav @ ubuntu: ~ / workspace $ curl -O //kr.archive.ubuntu.com/ubuntu/pool/universe/c/cherrytree/cherrytree_0.37.6-1.1_all.deb% Total% recibido% Xferd Velocidad promedio Tiempo Tiempo Tiempo Carga de descarga actual Velocidad total gastada izquierda 100 613k 100 613k 0 0 220k 0 0:00:02 0:00:02 -: -: - 220k gaurav @ ubuntu: ~ / workspace $

Producción:

trinity @ ubuntu: ~ / espacio de trabajo $ ls ath.html cherrytree_0.37.6-1.1_all.deb trinity @ ubuntu: ~ / espacio de trabajo $

Entonces, el paquete ahora se descarga y se guarda en el directorio de trabajo actual (CWD) con su nombre original.

Visualización de una barra de progreso mientras se descarga un archivo

Hay una modificación estética más disponible al usar el rizo comando para descargar un archivo. Puede ver el progreso de la descarga de su archivo en forma de barra de progreso en su terminal. Solo necesita agregar el -# opción con su comando para descargar un archivo.

Veamos un ejemplo de este ajuste.

Sintaxis:

curl - # -O [URL]

Ejemplo:

gaurav @ ubuntu: ~ / espacio de trabajo $ curl - # -O //archive.ubuntu.com/ubuntu/pool/main/e/emacs-defaults/emacs-defaults_47.0.tar.xz ######## ################################################ ################################################ ################################# 100.0% gaurav @ ubuntu: ~ / espacio de trabajo $ 

Producción:

gaurav @ ubuntu: ~ / espacio de trabajo $ ls ath.html cherrytree_0.37.6-1.1_all.deb emacs-defaults_47.0.tar.xz gaurav @ ubuntu: ~ / espacio de trabajo $ 

En este resultado, puede observar que he descargado un paquete llamado "emacs-defaults_47.0.tar.xz'En mi CWD y la barra de progreso se muestra en el terminal mientras la descarga estaba en progreso.

Reanudando la descarga interrumpida en CURL

Muchas veces, puede ocurrir una situación en la que tenga que descargar archivos de mayor tamaño. A veces, debido a algunas razones, como falla de energía o falla de la red, la descarga puede abortar en la mitad del proceso sin descargar el archivo completo. Incluso si presionas Ctrl + C en la terminal, el proceso se aborta.

El rizo comando cuando se usa con el -C La opción reanuda la descarga interrumpida.

Sintaxis:

curl -C - -O [URL]

Ejemplo:

En esta ilustración, he intentado descargar la imagen ISO de Ubuntu 20.04 desde el sitio web de Ubuntu.

gaurav @ ubuntu: ~ / workspace $ curl -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.1600250922-1570904140.1591164974%% total recibido% Xferd Velocidad promedio Tiempo Tiempo Tiempo Descarga actual Carga Total gastado Velocidad izquierda 0 2656M 0 1744k 0 0 87038 0 8:53:17 0:00:20 8:52:57 77726 ^ C

Aquí, aborté deliberadamente el proceso de descarga al Ctrl + C.

Ahora usaré el -C opción con la rizo comando para reanudar la descarga interrumpida desde el mismo sitio web de origen.

Producción:

gaurav @ ubuntu: ~ / workspace $ curl -C - -O //releases.ubuntu.com/20.04.1/ubuntu-20.04.1-desktop-amd64.iso?_ga=2.212264532.1184373179.1600250922-1570904140.1591164974 ** Reanudando la transferencia desde posición del byte 1851392%% total recibido% Xferd Velocidad promedio Tiempo Tiempo Tiempo Carga de descarga actual Velocidad total gastada izquierda 0 2654M 0 20.2M 0 0 57940 0 13:20:35 0:06:06 13:14:29 98278

La descarga se ha recuperado desde donde se canceló.

Descarga de archivos desde un servidor FTP usando CURL

Es bastante fácil con el rizo comando para descargar un archivo desde el servidor FTP usando el -u opción. Debe ingresar el nombre de usuario y la contraseña en el comando antes de ingresar la URL.

Sintaxis:

curl -u [nombre de usuario]: [contraseña] [URL]

A modo de ilustración, utilizaré un FTP público en línea.

Ejemplo:

gaurav @ ubuntu: ~ / espacio de trabajo $ curl -O -u [email protected]: eUj8GeW55SvYaswqUyDSm5v6N ftp://ftp.dlptest.com/16-Sep-20-16-0-0.csv% Total% Recibido% Xferd Promedio Velocidad Tiempo Tiempo Tiempo Carga de descarga actual Total gastado Velocidad izquierda 100390100390 0 0 93 0 0:00:04 0:00:04 -: -: - 93 gaurav @ ubuntu: ~ / workspace $

Aquí, he descargado un archivo llamado "16-Sep-20-16-0-0.csv ’ de este servidor ftp y lo guardé con su nombre original en mi CWD. Verificaré el archivo descargado usando el ls mando.

gaurav @ ubuntu: ~ / espacio de trabajo $ ls -al total 1092 drwxrwxr-x 3 gaurav gaurav 4096 16 de septiembre 16:15. drwxr-xr-x 87 gaurav gaurav 266240 16 de septiembre 10:22 .. -rw-r - r-- 1 gaurav gaurav 390 16 de septiembre 16:15 16-Sep-20-16-0-0.csv -rw- r - r-- 1 gaurav gaurav 204429 16 de septiembre 11:45 ath.html gaurav @ ubuntu: ~ / espacio de trabajo $

Descarga de varios archivos juntos usando CURL

Descargar varios archivos a la vez con el rizo El comando es una tarea muy sencilla. Solo usa el -O opción con la rizo comando similar a la forma en que lo hemos realizado en los bloques anteriores.

Sintaxis:

curl -O [URL-1] -O [URL-2] -O [URL-n]

Ejemplo:

gaurav @ ubuntu: ~ / espacio de trabajo $ curl -O //archive.ubuntu.com/ubuntu/pool/universe/a/aegean/aegean_0.15.2+dfsg-1.debian.tar.xz -O //archive.ubuntu. com / ubuntu / pool / main / a / apache2 / apache2_2.4.29.orig.tar.gz% Total% Recibido% Xferd Velocidad promedio Tiempo Tiempo Tiempo Carga de descarga actual Velocidad total gastada izquierda 100 63500100 63500 0 0 55458 0 0:00 : 01 0:00:01 -: -: - 55458100 8436k 100 8436k 0 0 123k 0 0:01:08 0:01:08 -: -: - 127k gaurav @ ubuntu: ~ / espacio de trabajo PS 

En este ejemplo, he descargado dos paquetes diferentes del repositorio de Ubuntu.

Producción:

gaurav @ ubuntu: ~ / espacio de trabajo $ ls -al total 9596 drwxrwxr-x 3 gaurav gaurav 4096 16 de septiembre 16:28. drwxr-xr-x 87 gaurav gaurav 266240 16 de septiembre 10:22 .. -rw-r - r-- 1 gaurav gaurav 390 16 de septiembre 16:15 16-Sep-20-16-0-0.csv -rw- r - r-- 1 gaurav gaurav 63500 16 de septiembre 16:28 aegean_0.15.2 + dfsg-1.debian.tar.xz -rw-r - r-- 1 gaurav gaurav 8638793 16 de septiembre 16:29 apache2_2.4.29. orig.tar.gz -rw-r - r-- 1 gaurav gaurav 204429 16 de septiembre 11:45 ath.html gaurav @ ubuntu: ~ / espacio de trabajo $ 

Los dos paquetes se descargan al mismo tiempo usando el comando curl.

Obteniendo encabezados HTTP de una URL con CURL

Los campos de encabezados HTTP de cualquier URL contienen información útil como agente de usuario, tipo de contenido, codificación, etc. Estos archivos de encabezado también proporcionan información sobre el objeto enviado en el cuerpo del mensaje. Los detalles sobre la solicitud y la respuesta también se obtienen de estos encabezados HTTP.

Puedes usar rizo comando con -I opción para obtener estos encabezados HTTP de una URL.

Sintaxis:

curl -I [URL]

Ejemplo:

gaurav @ ubuntu: ~ / espacio de trabajo $ curl -I www.firefox.com HTTP / 1.1 200 OK Tipo de contenido: texto / html; charset = ISO-8859-1 P3P: CP = "¡Esta no es una política de P3P! Consulta g.co/p3phelp para obtener más información". Fecha: miércoles, 16 de septiembre de 2020 11:17:00 GMT Servidor: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Transfer-Encoding: fragmentado Caduca: miércoles, 16 de septiembre de 2020 11:17:00 GMT Cache- Control: conjunto de cookies privado: 1P_JAR = 2020-09-16-11; expira = Vie, 16-Oct-2020 11:17:00 GMT; ruta = /; dominio = .google.com; Asegure Set-Cookie: NID = 204 = SpeHTVXkKYwe6uaKYLsPWmCA0A-sGb94c9jpbw067e7uhyeJnkap6TFEIESztwLOEst7KcDSBLgGrokh1EM2IZi2VPVzllH0tsvCu-QbKiunPoPJ6dD7oAnB7rxu30rAiO630vYm6SG1zbmGgxNEiB-adXp24h7iEoSq9WsjrGg; expira = Thu, 18-Mar-2021 11:17:00 GMT; ruta = /; dominio = .google.com; HttpOnly gaurav @ ubuntu: ~ / espacio de trabajo $

En este ejemplo, obtuve los encabezados HTTP de "www.firefox.com‘.

Obteniendo código fuente C usando CURL

Utilizando rizo comando con el --libcurl La opción puede recuperar el código fuente de C. Esto no tiene un uso significativo para los usuarios legos, pero puede resultar muy útil para los programadores de sistemas, analistas de seguridad y desarrolladores de aplicaciones.

Sintaxis:

curl [URL]> nombre de archivo --libcurl [code_filename]

Ejemplo:

En este ejemplo, he obtenido el contenido de la URL. allthings.how y lo guardé en un archivo llamado gy_ath.html. El código fuente de C se almacena por separado en el fuente.c Archivo.

curl //www.allthings.how> gy_ath.html --libcurl source.c 

Producción:

gaurav @ ubuntu: ~ / workspace $ curl //www.allthings.how> gy_ath.html --libcurl source.c% Total% Recibido% Xferd Velocidad promedio Tiempo Tiempo Tiempo Descarga actual Carga Total gastada Velocidad izquierda 0 0 0 0 0 0 0 0 -: -: - 0:00:01 -: -: - 0 gaurav @ ubuntu: ~ / espacio de trabajo $

Comprobemos ahora los archivos descargados.

gaurav @ ubuntu: ~ / workspace $ ls -al total 404 drwxrwxr-x 3 gaurav gaurav 4096 16 de septiembre 17:08. drwxr-xr-x 87 gaurav gaurav 266240 16 de septiembre 10:22 .. -rw-r - r-- 1 gaurav gaurav 0 16 de septiembre 17:13 gy_ath.html -rw-r - r-- 1 gaurav gaurav 1535 16 de septiembre 17:13 source.c gaurav @ ubuntu: ~ / workspace $

El fuente.c archivo contiene el código fuente. Esto se puede mostrar en el terminal usando el gato mando. He puesto algunas líneas de la salida en el bloque que se muestra a continuación.

C sourcegaurav @ ubuntu: ~ / workspace $ cat source.c / ********* Código de muestra generado por la herramienta de línea de comandos curl ********** * Todas las opciones de curl_easy_setopt () están documentadas en: * //curl.haxx.se/libcurl/c/curl_easy_setopt.html ******************************* *************************************** / #include int main (int argc, char * argv []) {CURLcode ret; CURL * hnd; hnd = curl_easy_init (); curl_easy_setopt (hnd, CURLOPT_BUFFERSIZE, 102400L); curl_easy_setopt (hnd, CURLOPT_URL, "//www.allthings.how"); curl_easy_setopt (hnd, CURLOPT_USERAGENT, "curl / 7.58.0"); curl_easy_setopt (hnd, CURLOPT_MAXREDIRS, 50L);

Usando un proxy en CURL para acceder a una URL

Como se discutió en la introducción, el rizo El comando admite una amplia gama de protocolos como FTP, SMTP, HTTPS, SOCKS, etc. A veces, el uso de un servidor proxy para transferir archivos se vuelve importante cuando desea mejorar la velocidad de su transferencia y también proteger su identidad. rizo El comando se puede usar fácilmente para transferir archivos a través del servidor proxy agregando el -X opción a ella.

Ejemplo:

curl -x [dirección_proxy]: [puerto] [URL]

En el ejemplo anterior, asumí que su proxy no requiere autenticación. En caso de que el proxy requiera autenticación para iniciar la transferencia, puede usar el siguiente comando.

curl -u [nombre de usuario]: [contraseña] -x [dirección_proxy]: [puerto] [URL]

Usando este método simple, podemos transferir archivos a través de un servidor proxy con la opción -X usado con el rizo mando.

Conclusión

En este breve tutorial, aprendimos cómo rizo El comando demuestra ser útil para descargar contenido directamente desde su terminal. También aprendimos sobre las diferentes opciones disponibles con este comando para ser utilizado para varias tareas.