cURL, abreviatura de "Cliente para URL", es una herramienta de línea de comandos para transferir datos mediante varios protocolos. Este artículo tiene como objetivo proporcionar los comandos que se usan ampliamente y como una referencia útil.
Índice
- Descargar un solo archivo
- Guarde la salida de cURL en un archivo
- Ocultar barra de progreso
- Obtener varios archivos a la vez
- Seguir encabezados de ubicación HTTP con la opción -L
- Continuar/Reanudar una descarga anterior
- Usar un proxy con o sin autenticación
- Consultar encabezados HTTP
- Subir archivos al servidor FTP
- Descargar archivos del servidor FTP
- Lista/Descarga usando rangos
- Más información sobre el uso de la opción Verbose y Trace
- Enviar correo utilizando el protocolo SMTP
- Comprobación de compatibilidad con HTTP/2
- Simular métodos HTTP
- Realizar una solicitud POST con parámetros
- Conclusión
Puede invocar curl
comando desde su terminal sin pensar en formas de instalarlo, ya que viene preinstalado en la mayoría de los sistemas operativos basados en Linux.
Hay una gran cantidad de casos de uso para curl, como:
- Carga FTP
- Soporte de proxy
- Conexiones SSL
- Publicación HTTP
cURL también admite el uso de todos los siguientes protocolos:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP , SMTPS, TELNET y TFTP.
Descargar un solo archivo
El siguiente comando obtendrá el contenido de la URL y lo mostrará en STDOUT (es decir, en su terminal).
curl https://www.gnu.org
Para almacenar el resultado en un archivo, debe redirigirlo como se muestra a continuación. Esto también mostrará algunas estadísticas de descarga adicionales.
curl https://www.gnu.org > gnu-org.html
Guardar la salida de cURL en un archivo
Podemos guardar el resultado del comando cURL en un archivo usando -o
/-O
opciones.
-o
(o minúscula) el resultado se guardará en el nombre de archivo proporcionado en la línea de comando-O
(O mayúscula) se tomará el nombre de archivo en la URL y se utilizará como nombre de archivo para almacenar el resultado
curl -o my-gettext.html https://www.gnu.org/software/gettext/manual/gettext.html
Como resultado, ahora la página gettext.html
se guardará en el archivo llamado my-gettext.html
. También puede notar que cuando ejecuta cURL con -o
opción, muestra el medidor de progreso para la descarga de la siguiente manera.
Cuando usa cURL -O
, guardará el contenido en el archivo llamado 'gettext.html' en la máquina local.
curl -O http://www.gnu.org/software/gettext/manual/gettext.html
Nota:cuando curl
tiene que escribir los datos en el terminal, se desactiva el Progress Meter, para evitar confusiones en la impresión. Podemos usar >
, -o
, -O
opciones para mover el resultado a un archivo.
Ocultar barra de progreso
cURL por defecto muestra la barra de progreso. Para ocultarlo -s
(--silent
)se puede utilizar la opción.
curl -s -O http://www.gnu.org/software/gettext/manual/gettext.html
Si por alguna razón eso no funciona en su plataforma, siempre puede redirigir stderr a /dev/null
:
curl -O http://www.gnu.org/software/gettext/manual/gettext.html 2>/dev/null
Obtener varios archivos a la vez
Por supuesto, podemos descargar varios archivos de una sola vez especificando las URL en la línea de comando.
curl -O https://www.gnu.org/software/gettext/manual/html_node/index.html -O https://www.gnu.org/software/gettext/manual/gettext.html
Seguir encabezados de ubicación HTTP con la opción -L
Sin embargo, por defecto, cURL no sigue los encabezados de ubicación HTTP. También se denomina como redireccionamientos. Cuando una página web solicitada se mueve a otro lugar, se enviará un encabezado de ubicación HTTP como respuesta y tendrá la ubicación real de la página web.
Podemos insistir en cURL para seguir la redirección usando -L
opción, como se muestra a continuación.
curl -L https://www.google.com
Continuar/Reanudar una descarga anterior
Usando cURL -C
opción, puede continuar una descarga que ya se detuvo por algún motivo. Esto será útil cuando descargue archivos grandes y la descarga se interrumpa.
Si decimos -C -
, luego cURL encontrará desde dónde comenzar a reanudar la descarga. También podemos dar un desplazamiento -C <offset>
. Los bytes de desplazamiento proporcionados se omitirán desde el principio para el archivo de origen.
Inicie una gran descarga usando curl
y presiona Ctrl-C
para detenerlo entre la descarga.
curl -O https://www.gnu.org/software/gettext/manual/gettext.html
Usando curl -C -
, podemos continuar la descarga desde donde la dejamos antes.
curl -C - -O https://www.gnu.org/software/gettext/manual/gettext.html
Usar un proxy con o sin autenticación
Si está detrás de un servidor proxy escuchando en el puerto 8080 en proxy.yourdomain.com, haga lo siguiente:
curl -x proxy.yourdomain.com:8080 -U user:password -O https://www.gnu.org/software/gettext/manual/gettext.html
donde puede omitir -U user:password
si su proxy no requiere autenticación.
Consultar encabezados HTTP
Los encabezados HTTP permiten que el servidor web remoto envíe información adicional sobre sí mismo junto con la solicitud real. Además, esto proporciona al cliente detalles sobre cómo se está manejando la solicitud.
Para consultar los encabezados HTTP de un sitio web, haga lo siguiente:
curl -I https://www.gnu.org
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 21:22:32 GMT
Server: Apache/2.4.7
Content-Location: home.html
Vary: negotiate,accept-language,Accept-Encoding
TCN: choice
Strict-Transport-Security: max-age=63072000
Access-Control-Allow-Origin: (null)
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Mon, 13 Jul 2020 21:22:32 GMT
Content-Type: text/html
Content-Language: en
Subir archivos al servidor FTP
cURL también se puede usar para cargar archivos al servidor FTP con -T
opción.
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.server.com
Como resultado, el comando anterior cargará el archivo llamado myfile.txt
al servidor FTP. También puede cargar varios archivos al mismo tiempo utilizando las operaciones de rango.
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.server.com
Opcionalmente podemos usar .
para obtener la entrada de STDIN y transferirla al control remoto.
curl -u ftpuser:ftppass -T - ftp://ftp.server.com/mynewfile.txt
El comando anterior obtendrá la entrada del usuario desde la entrada estándar y guardará el contenido en el servidor ftp con el nombre mynewfile.txt
.
Puede proporcionar una -T
para cada URL y el par especifica qué cargar y dónde.
Descargar archivos del servidor FTP
cURL también se puede usar para descargar archivos de servidores FTP. Si la ruta de FTP dada es un directorio, por defecto listará los archivos bajo el directorio específico.
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/mysql.php
El comando anterior descargará el mysql.php
archivo del servidor ftp y guárdelo en el directorio local.
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
Aquí, la URL dada se refiere a un directorio. Entonces cURL listará todos los archivos y directorios bajo la URL dada.
Lista/Descarga usando rangos
cURL admite rangos que se darán en la URL. Cuando se proporciona un rango, se descargarán los archivos que coincidan dentro del rango. Será útil descargar paquetes de los sitios espejo de FTP.
curl http://ftp.us.debian.org/debian/pool/main/[a-z]/
El comando anterior enumerará todos los paquetes de a-z
rangos en la terminal.
Más información usando la opción Verbose y Trace
Puedes saber qué está pasando usando -v
opción. Esta opción habilita el modo detallado e imprimirá los detalles.
curl -v https://www.gnu.org
El comando about generará lo siguiente:
* Trying 209.51.188.148:443...
* Connected to www.gnu.org (209.51.188.148) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=emacs.org
* start date: Jun 17 09:07:40 2020 GMT
* expire date: Sep 15 09:07:40 2020 GMT
* subjectAltName: host "www.gnu.org" matched cert's "www.gnu.org"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: www.gnu.org
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 13 Jul 2020 21:56:04 GMT
< Server: Apache/2.4.7
< Content-Location: home.html
< Vary: negotiate,accept-language,Accept-Encoding
< TCN: choice
< Strict-Transport-Security: max-age=63072000
< Access-Control-Allow-Origin: (null)
< Accept-Ranges: bytes
< Cache-Control: max-age=0
< Expires: Mon, 13 Jul 2020 21:56:04 GMT
< Transfer-Encoding: chunked
< Content-Type: text/html
< Content-Language: en
<
...
Enviar correo usando el protocolo SMTP
cURL también se puede usar para enviar correo usando el protocolo SMTP. Debe especificar la dirección de origen, la dirección de destino y la dirección IP del servidor de correo como se muestra a continuación.
curl --mail-from [email protected] --mail-rcpt [email protected] smtp://mailserver.com
Una vez que se ingresa el comando anterior, esperará a que el usuario proporcione los datos al correo. Una vez que haya redactado su mensaje, escriba .
(punto) como la última línea, que enviará el correo electrónico inmediatamente.
Comprobación de compatibilidad con HTTP/2
Si tiene la última versión de cURL, puede usar --http2
opción para verificar si una URL en particular es compatible con el nuevo protocolo HTTP/2. Por lo tanto, si el sitio admite HTTP/2, verá HTTP/2.0 200
en el encabezado en lugar de HTTP/1.1 200
.
curl -I --http2 https://www.opensource.com
Simular métodos HTTP
El GET
El método se utiliza para recuperar recursos de una URL en particular. El simple curl https://www.gnu.org/
el comando usará GET
como el método HTTP predeterminado, sin embargo, también se puede especificar usando --request GET
o -X GET
.
curl --request GET https://www.gnu.org
El POST
El método se utiliza para publicar información en un servidor web (por ejemplo, un comentario en un foro). Esto se puede especificar usando --request POST
o -X POST
.
curl --request POST https://yourwebsite.com
El DELETE
El método elimina el recurso del servidor web asociado con una URL específica. Esto se puede especificar usando --request DELETE
o -X DELETE
.
curl --request DELETE https://yourwebsite.com
El PUT
El método crea o reemplaza un recurso basado en los datos que el cliente envía al servidor web. (por ejemplo, crear una nueva página web o actualizar una existente). Esto se puede especificar usando --request PUT
o -X PUT
.
curl --request PUT https://yourwebsite.com
Realizar una solicitud POST con parámetros
El siguiente comando enviará el animal1
y animal2
parámetros, junto con sus valores correspondientes, a https://yourdomain.com/animals.php
curl --request POST --data "animal1=cat&animal2=dog" https://yourdomain.com/animals.php
Puede utilizar este consejo para simular el comportamiento de un formulario HTML normal.
Conclusión
En esta publicación, explicamos qué es cURL y lo que puedes hacer con algunos comandos básicos. Para obtener más información sobre cURL, puede visitar el sitio web del proyecto.