curl en Linux: Descargar archivos y consumir APIs desde el terminal
El comando curl en Linux puede ser utilizado para descargar archivos, así como también conversar con APIs Web directamente desde el shell de Linux. Es un comando muy versátil para que los programadores prueben el acceso a las APIs de software y aplicaciones hospedadas en la web.
La sintaxis básica de curl es:
$ curl URL
Ejemplo:
$ curl https://google.com<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"><TITLE>301 Moved</TITLE></HEAD><BODY><H1>301 Moved</H1>The document has moved<A HREF="https://www.google.com/">here</A>.</BODY></HTML>
De esta forma, envía una solicitud GET al servidor informado, en la página informada. Es posible pasar parámetros GET directamente en la URL utilizando los separadores "?" y "&".
$ curl http://api.servidor.com/myapi/2.5/tempo?id=217
Es necesario cuando se pase más de un parámetro en la URL, especialmente utilizando el símbolo "&", usar las comillas simples en la URL:
$ curl 'http://api.servidor.com/myapi/2.5/tempo?id=217&user=uira'
El curl permite informar un timeout en segundos por el cual esperará una respuesta del servidor, con la opción "-m":
$ curl -m 3 'http://api.servidor.com/myapi/2.5/tempo?id=2172797&user=uira'
Es posible hacer una llamada POST utilizando curl, con la opción "-X":
$ curl -X POST 'http://api.servidor.com/myapi/2.5/tempo'
La opción -X permite los métodos GET (predeterminado), POST y PUT.
Para enviar datos en la solicitud POST, se debe usar la opción "-d". Los datos deben estar en formato URL encoded.
$ curl -d 'id=217&user=uira' -X POST 'http://api.servidor.com/myapi/2.5/tempo'
También se pueden separar los datos en múltiples opciones "-d":
$ curl -d id=217 -d user=uira -X POST 'http://api.servidor.com/myapi/2.5/tempo'
También es posible especificar un archivo que contenga los datos para envío via POST, utilizando la opción "-d" con "@":
$ curl -d @arquivo -X POST 'http://api.servidor.com/myapi/2.5/tempo'
Si el sitio requiere una autenticación HTTP simple, la opción "-u" puede enviar un usuario y contraseña:
$ curl -u uira@senha -d id=217 -d user=uira -X POST 'http://api.servidor.com/myapi/2.5/tempo'
Para enviar un archivo JSON, es necesario especificar el encabezado HTTP, con la opción "-H":
$ curl -H "Accept: application/json" -d @arquivojson -X PUT 'http://api.servidor.com/myapi/2.5/tempo'
La opción "-i" permite ver la respuesta HTTP del servidor:
$ curl -i 'https://api.openweathermap.org/data/2.5/weather?q=Belo%20Horizonte,PT&appid=9908ae7bbb3c530f54efdec77ac3ccde'
HTTP/1.1 200 OK
Server: openresty
Date: Tue, 12 May 2020 22:13:25 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 473
Connection: keep-alive
X-Cache-Key: /data/2.5/weather?q=belo%20horizonte,pt
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST
{"coord":{"lon":-7.42,"lat":39.31},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"base":"stations","main":{"temp":286.83,"feels_like":285.15,"temp_min":286.48,"temp_max":288.15,"pressure":1008,"humidity":87},"visibility":10000,"wind":{"speed":3.1,"deg":220},"clouds":{"all":20},"dt":1589321586,"sys":{"type":1,"id":6402,"country":"PT","sunrise":1589260722,"sunset":1589312008},"timezone":3600,"id":2270968,"name":"Belo Horizonte","cod":200}
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.