|
| 1 | +# CURL |
| 2 | + |
| 3 | +El comando `curl` es una herramienta para transferir datos de cliente a servidor o servidor a cliente. Admite una gran variedad de protocolos como FTP, HTTP, IMAP, LDAP, POP3, SCP, SMTP, etc, por lo que soporta características como uso de proxies, autenticación, subida de ficheros, conexiones SSL, cookies y muchas otras más. |
| 4 | + |
| 5 | +Vamos a ver casos prácticos enfocados a peticiones HTTP y HTTPS. |
| 6 | + |
| 7 | +Para ejecutar una petición GET a un servidor y mostrar su respuesta ejecutaremos el comando `curl` seguido de la URL del servidor. Ejemplo: |
| 8 | + |
| 9 | +```shell |
| 10 | +$ curl https://www.google.es |
| 11 | +``` |
| 12 | + |
| 13 | +Si queremos guardar la respuesta utilizaremos el flag `-o` (`--output`) indicando la ruta de un fichero: |
| 14 | + |
| 15 | +```shell |
| 16 | +$ curl -o ./google-response.txt https://www.google.es |
| 17 | +``` |
| 18 | + |
| 19 | +> Alternativamente podemos utilizar el comando redirección (`>` o `>>`) para redirigir la salida a la ruta del fichero que queremos guardar. |
| 20 | +
|
| 21 | +Si queremos descargarnos un fichero con el nombre de la URL podemos utilizar el flag `-O` (`--remote-name`) para indicar a curl que descargue el contenido de la respuesta en un fichero con el mismo nombre que el de la URL. Ejemplo para descargar una imagen: |
| 22 | + |
| 23 | +```shell |
| 24 | +$ curl -O https://upload.wikimedia.org/wikipedia/commons/3/35/Tux.svg |
| 25 | +``` |
| 26 | + |
| 27 | +> Podemos utilizar el flag `-L` (`--location`) junto a `-O` para seguir redirecciones. |
| 28 | +
|
| 29 | +Si descargamos un fichero grande podemos cortar la descarga y continuarla más adelante utilizando el flag `-C` (`--continue-at <offset>`) con el valor `-` para utilizar el fichero existente: |
| 30 | + |
| 31 | +```shell |
| 32 | +## Limitamos la velocidad de descarga a 1Mbps (el fichero pesa 18MB) |
| 33 | +$ curl -O --limit-rate 1M https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_1920_18MG.mp4 |
| 34 | + |
| 35 | +## Cortamos la descarga con Ctrl + C |
| 36 | +^C |
| 37 | + |
| 38 | +## Continuamos la descarga añadiendo "-C -" |
| 39 | +$ curl -O --limit-rate 1M -C - https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_1920_18MG.mp4 |
| 40 | +``` |
| 41 | + |
| 42 | +> Si no queremos mostrar barra de progreso al descargar un fichero añadiremos el flag `-s` (`--silent`). |
| 43 | +
|
| 44 | +Podemos hacer debugging de las cabeceras y conexión utilizando el flag `-v` (`--verbose`): |
| 45 | + |
| 46 | +```shell |
| 47 | +curl -v https://www.google.es |
| 48 | +``` |
| 49 | + |
| 50 | +Si queremos mostrar sólo las cabeceras de respuesta podemos utilizar el flag `-I`: |
| 51 | + |
| 52 | +```shell |
| 53 | +$ curl -I https://www.google.es |
| 54 | +``` |
| 55 | + |
| 56 | +Podemos cambiar el _user agent_ utilizando el flag `-A` (`--user-agent`): |
| 57 | + |
| 58 | +```shell |
| 59 | +## Comprueba las respuestas con y sin el flag. Esta API es capaz de detectar peticiones curl. |
| 60 | +$ curl -A "None" https://wttr.in/ |
| 61 | +``` |
| 62 | + |
| 63 | +Podemos modificar las headers de petición utilizando el flag `-H <header>: <value>` por cada cabecera. Ejemplo: |
| 64 | + |
| 65 | +```shell |
| 66 | +## La siguiente API es capaz de responder en diferentes formatos (JSON, XML, HTML, YAML). |
| 67 | +$ curl -H "Accept: application/xml" mockbin.org/request |
| 68 | +$ curl -H "Accept: application/json" mockbin.org/request |
| 69 | +``` |
| 70 | + |
| 71 | +Para realizar peticiones con diferente verbo HTTP (POST, PUT, DELETE, PATCH, etc) utilizaremos el flag `-X <method>`. El siguiente ejemplo realiza una petición POST con datos enviados como JSON utilizando el flag `-d` (`--data`): |
| 72 | + |
| 73 | +```shell |
| 74 | +curl -X POST -d '{"title": "Post title", "body": "Post content", "userId": 1}' -H 'Content-Type: application/json' https://jsonplaceholder.typicode.com/posts |
| 75 | +``` |
| 76 | + |
| 77 | +> Podemos especificar si utilizar HTTP1.1 o HTTP2 mediante los flags `--http1.1` y `--http2` respectivamente. |
| 78 | +
|
| 79 | +Si necesitamos guardar las cabeceras de respuesta podemos utilizar el flag `-D` (`--dump-header <filename>`) y el nombre de un fichero. |
| 80 | + |
| 81 | +```shell |
| 82 | +$ curl -D mockbin-response-headers.txt mockbin.org/request |
| 83 | +``` |
| 84 | + |
| 85 | +> Si utilizamos `-D -` volcará las cabeceras en la salida de consola. |
0 commit comments