El comando curl esta diseñado para verificar una url y ademas permite la transferencia de datos. Hace uso de la librería opensource libcurl disponible en todas las distribuciones Linux.
El comando Curl es compatible con la siguiente lista de protocolos:
- HTTP y HTTPS
- FTP y FTPS
- IMAP e IMAPS
- POP3 y POP3S
- SMB y SMBS
- SFTP
- SCP
- TELNET
- GOPHER
- LDAP y LDAPS
- SMTP y SMTPS
Operaciones básicas
La sintaxis básica del comando es la siguiente:
|
|
Algunas de las opciones mas relevantes son:
- -#, –progress-bar Make curl display a simple progress bar instead of the more informational standard meter.
- -b, –cookie <name=data> Supply cookie with request. If no =, then specifies the cookie file to use (see -c).
- -c, –cookie-jar
File to save response cookies to. - -d, –data Send specified data in POST request. Details provided below.
- -f, –fail Fail silently (don’t output HTML error form if returned).
- -F, –form <name=content> Submit form data.
- -H, –header
Headers to supply with request. - -i, –include Include HTTP headers in the output.
- -I, –head Fetch headers only.
- -k, –insecure Allow insecure connections to succeed.
- -L, –location Follow redirects.
- -o, –output
Write output to . Can use –create-dirs in conjunction with this to create any directories specified in the -o path. - -O, –remote-name Write output to file named like the remote file (only writes to current directory).
- -s, –silent Silent (quiet) mode. Use with -S to force it to show errors.
- -v, –verbose Provide more information (useful for debugging).
- -w, –write-out
Make curl display information on stdout after a completed transfer. See man page for more details on available variables. Convenient way to force curl to append a newline to output: -w “\n” (can add to ~/.curlrc). - -X, –request The request method to use.
Se puede realizar la peticion por una IP o un interfaz especifico con el flag –interface:
|
|
HTTP con curl
Es posible reanudar una descarga interrumpida con el siguiente comando:
|
|
Podemos limitar la velocidad de descarga con:
|
|
Gestión certificados
Podemos verificar un certificado SSL con:
|
|
Podemos ignorar certificado SSL con:
|
|
User Agent
Podemos indicar un User-Agent especifico con el flag -A:
|
|
Aquí hay una lista de User-Agent validos:
|
|
Customize headers
Podemos modificar las cabeceras con el flag -H:
|
|
Referer
Podemos indicar que estamos realizando una referencia de otra url con el flag –referer:
|
|
Proxy con autenticación
Podemos indicar un proxy y las credenciales si son necesarias para el proxy con el flag -u:
|
|
Si el proxy requiere una autenticación especifica, habría que usar el flag -U:
|
|
Cookies
Podemos navegar usando unas cookies previamente descargadas:
|
|
GET
Para usar el método GET basta con usar el comando:
|
|
POST
Para usar el método POST hay que usar -X POST. Es necesario indicar el campo data y opcionalmente se puede enviar el Content-Type.
Formas de enviar datos:
|
|
El formato para enviar un POST con un JSON con los flags en formato largo sería:
|
|
El mismo comando pero en formato corto sería:
|
|
Para enviar un fichero en vez de un string se usa el data @fichero:
|
|
Para enviar un POST con Content-Type www-form podemos ponerlo en el flag -H o eliminarlo, ya que es el Content-Type por defecto en curl.
|
|
PUT
El proceso es el mismo que con POST.
|
|
|
|
DELETE
Podemos borrar un fichero con el comando:
|
|
PATCH
|
|
MOVE
Podemos mover un fichero con el comando:
|
|
OPTIONS
Podemos ver los métodos que están permitidos en un servidor HTTP con el comando:
|
|
MKCOL
Podemos crear un directorio con el comando:
|
|
FTP/FTPS/SFTP/SCP con curl
Descarga
Podemos descargar ficheros de un servidores FTP con los comandos:
|
|
También podemos descargar ficheros de servidores SSH usando SFTP o SCP con los siguientes comandos:
|
|
Subida
También es posible subir ficheros al servidor FTP con el flag -T:
|
|
SMB con curl
Podemos descargar ficheros de un servidor SMB con el comando:
|
|
También es posible subir ficheros al servidor SMB con el flag -T:
|
|
LDAP/LDAPS con curl
Si se tiene instalada la librería OpenLDAP, es posible usar curl para real;izar peticiones utilizando el protocolo ldap://. Por defecto se usará LDAPv3 y en caso de que este falle se usará LDAPv2.
La sintaxis de una consulta con LDAP es algo compleja, para obtener ayuda seria relevante usar el RFC 2255
Algunos ejemplos de consultas son las siguientes:
|
|