Introducción a cURL



@eduardo_gpg

Número de visitas 1071

Tiempo de lectura 4 min

21 Febrero 2021

cURL es una herramienta de línea de comandos integrada para los sistemas operativos basados en Unix. Utilizando esta herramienta seremos capaces de transferir información para diferentes protocolos de Internet. Entre los que destacan:

  • HTTP
  • HTTPS
  • SMTPS
  • TELNET
  • POP3

Para sistemas operativos basados en unix, si deseamos conocer si un protocolo es aceptado por cURL, ejecutamos el siguiente comando.

curl --version

No solo conoceremos la versión de cURL con la que estamos trabajando, si no además un listado de todos los protocolos aceptados por dicha versión. 🙂


Por la gran flexibilidad y poder que cURL nos ofrece, en esta ocasión me gustaría compartir con todos ustedes una breve introducción de cómo utilizar esta asombrosa herramienta, pudiendo así sacarle el máximo provecho posible, y así testear nuestras aplicaciones sin recurrir a servicios de terceros.😎

De forma personal he utilizado cURl para probar APIs, por lo tanto, para este post, nos enfocaremos en el protocolo HTPP, y trabajaremos con sus métodos más importantes:

  • GET: Permite obtener un recurso por parte del servidor.
  • POST: Permite crear un recurso en el servidor.
  • PUT: Permite actualizar un recurso en el servidor.
  • DELETE: Permite eliminar un recurso en el servidor.

Para fines prácticos estaré testeando cada una de las peticiones mediante el servicio de https://httpbin.org/. Tú, si así lo deseas, puedes utilizar algún otro tipo servicio, o inclusive algún API que tengas a la mano. 🤠

Bien, una vez dicho todo esto, comencemos. 🕵️‍♂️

Dato interesante: Al cURL se una herramienta para el lado del cliente, su nombre es la unión de c (Client) + URL (Dirección del servidor): cURL.

Get

La petición más sencilla de construir, y realizar, es a través del método GET. Basta con pasar como argumento la dirección a la cual deseamos realizar la petición. 😎

curl <url del servidor>

Ejemplo:

Realizando al petición a httpbin la respuesta por parte del servidor sería la siguiente:

{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.55.1",
    "X-Amzn-Trace-Id": "Root=1-6032f729-462a20cf40add34a17933651"
  },
  "origin": "xxx.xxx.xxx.xxx",
  "url": "https://httpbin.org/get"
}

Si bien la respuesta se encuentra en un formato JSON, lo que debemos hacer, para mejorar la comunicación con el servidor, es añadir el encabezado de accept; indicando así que tipo de contenido puede procesar el cliente.

Para añadir un encabezado haremos uso de la bandera -H.

curl "https://httpbin.org/get" -H "accept: application/json"

NOTA: En caso la petición requiera múltiples encabezado, será necesario utilizar la bandera -H por cada uno de ellos.

Si así lo deseamos, podemos realizar una petición y pasar valores en el queryset.

Por temas prácticos, httpbin nos retornara los valores que hayamos enviado en el atributo args:

{
  "args": {
    "name": "Eduardo",
    "project": "PyWombat"
  },
  "headers": {
    ...
  },
  ...
}

Para un resultado mucho más verboso haremos uso de la bandera -v. 🥳

curl -X GET "https://httpbin.org/get" -H "accept: application/json" -v

Opción larga:

curl "https://httpbin.org/get" --VERBOSE -H "accept: application/json"

Un resultado más verboso nos brinda mayor información sobre la respuesta por parte del servidor, desde el status code, el Content Type, Content Length, Cookies y entre otras más.

Si queremos conocer únicamente el encabezado de la respuesta usaremos la bandera -i-

curl "https://httpbin.org/get" -i -H"accept: application/json"
HTTP/1.1 200 OK
Date: Mon, 22 Feb 2021 16:26:41 GMT
Content-Type: application/json
Content-Length: 269
Connection: keep-alive
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

POST

Por default las peticiones sobre los protocolos http o https se realizan utilizando el método GET, sin embargo, si deseamos modificar dicho método haremos uso de la bandera -X.

Por ejemplo, relimemos una petición POST.

curl -H "accept: application/json"  -X POST https://httpbin.org/post

Si bien el orden de las bandera no es relevante, para una mejor lectura por parte de los usuarios, recomiendo primero definamos el método y url a utilizar, y posteriormente los encabezados.

curl -X POST https://httpbin.org/post -H "accept: application/json"

Si deseamos enviar información mediante este método lo haremos utilizando la bandera -d (Data). Utilizando comillas simples y mediante una estructura JSON seremos capaces de enviar nuestra información al servidor. Perfecto para simular el submit de un formulario.

``` curl -X POST https://httpbin.org/post -H "accept: application/json" -d '{"username": "Eduardo", "project":"PyWombat"}'

Obtendremos como resultado:

{ "args": {}, "data": "", "files": {}, "form": { "{\"username\": \"Eduardo\", \"project\":\"PyWombat\"}": "" }, "headers": { "Accept": "application/json", "Content-Length": "45", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "curl/7.58.0", }, "json": null, "origin": "xxx.xxx.xxx.xxx", "url": "https://httpbin.org/post" }

La información enviada ahora se encuentra en el atributo _form_.

__NOTA__: Si vamos a realizar la petición para un sistema operativo Windows, será necesario hacer uso de backslash (\) antes de las comillas dobles.

curl -X POST https://httpbin.org/post -H "accept: application/json" -d '{\"username\": \"Eduardo\", \"project\":\"PyWombat\"}'

### PUT & DELETE

Listo, para los 2 últimos método es bastante sencillo. Basta con utilizar las banderas previamente mencionadas.

Comencemos con _PUT_. Imaginemos que deseamos actualizar el _username_ para nuestro usuario con id 1. La petición pudiera quedar de la siguiente manera.

curl -X PUT "https://httpbin.org/put" -H "accept: application/json" -d '{"username":"Ismael", "id": "1"}'

Dependiendo del servidor, podemos enviar el id del usuario directamente en la URL (https://httpbin.org/put/1 (Que sería lo ideal)) o en en el atributo form.

Si deseamos eliminar algún recurso del servidor nos apoyamos del método _DELETE_.

curl -X DELETE "https://httpbin.org/delete" -H "accept: application/json"

### Descargar archivos.

Y como un extra para el post, sabias que, cURL no solo nos permite obtener un respuesta por parte del servidor en formato HTML, JSON o XML, no; Utilizando esta herramienta seremos capaces, inclusive, de descargar archivos (Imágenes, vídeos, GIFs, etc...). Y para ello existen 2 formas de hacerlo.

Utilizando la bandera _-O_ podremos descargar un archivo con el mimos nombre en el server. 💾

curl https://i.imgur.com/eduGSTv.mp4 -O

Utilizando la bandera _-o_ podremos descargar el archivo y nombrarlo como nosotros deseemos.  ⏲

curl -o doge.mp4 https://i.imgur.com/eduGSTv.mp4 ```

Conclusión

En conclusión, como pudimos aprender, hacer uso de cURL es relativamente sencillo, es cuestión de conocer un par de banderas y la estructura que debemos utilizar.

Como mencione anteriormente, cURL es una herramienta que podremos encontrar para los sistemas operativos basados en unix. Una super herramienta, con la cual seremos capaces de testar nuestras aplicaciones y servicios de una forma muy sencilla. 😉

Si bien existen otras alternativas para poder crear peticiones, creo que no nos viene para nada mal aprender cURL. 🍻


¿El contenido te resulto de ayuda?

Para poder dejar tu opinión es necesario ser un usuario autenticado. Login

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍