Conceptos básicos de la línea de comandos: solicitudes de red

La realización de solicitudes de red desde la línea de comandos se presenta en una variedad de formas y tamaños. Algunas personas confían plenamente en , y a curlotras les encanta wget. En mi caso, me encanta el paquete que proporciona comandos , y lwp-requestcon nombres familiares . El tercero de la lista, , es algo que utilizo con bastante regularidad para solucionar problemas con los encabezados devueltos por los servidores.GETPOSTHEADHEAD
Empezando
Los comandos que vamos a utilizar los proporciona un paquete llamado lwp-request.
El paquete en cuestión está escrito en Perl y tiende a venir de serie con bastantes distribuciones de Linux, así como con otros sistemas operativos tipo Unix como macOS.
El lwp-requestcomando se puede invocar directamente con una serie de argumentos, pero repasaremos los scripts auxiliares que lo acompañan para simplificar.
GETSi no lo tiene POSTy HEADestá en su sistema, lo más probable es que pueda instalar el lwp-requestpaquete desde su administrador de paquetes favorito.
En sistemas derivados de Ubuntu y Debian, puedes instalarlo usando los siguientes comandos:
- sudo apt update
- sudo apt install libwww-perl
En CentOS, Rocky Linux, Fedora y otros sistemas derivados de RedHat, puede instalarlo con soporte para URL HTTPS usando el siguiente comando:
- sudo dnf install perl-libwww-perl.noarch perl-LWP-Protocol-https.noarch
GET
Digamos que te gustó tanto el logotipo de Alligator.io que quisiste descargarlo localmente. Es un logotipo increíble, ¿quién no querría tener su propia copia?
Para acceder GETal archivo, simplemente puedes ejecutar:
- GET https://alligator.io/images/logo-fancy.svg
¡No tan rápido! Lo único que hace es mostrar un montón de marcado SVG.
Siguiendo el verdadero estilo de la filosofía Unix, el GETcomando hace una cosa realmente bien y es GETcopiar un archivo.
Esto es genial cuando quieres verificar una URL para ver qué está devolviendo el servidor web, pero si realmente quieres descargar ese hermoso logotipo, querrás enviar la salida a un archivo:
- GET https://alligator.io/images/logo-fancy.svg logo-fancy.svg
¡Ahora tenemos ese fantástico logo de Alligator.io descargado en un archivo local!
POST
El GETcomando nos permite consumir archivos de servidores remotos mientras POSTnos permite enviar datos a un servidor para su procesamiento y devolver su salida.
Como mínimo, la sintaxis POSTes la misma que GET:
- POST https://httpbin.org/post
A continuación, se le solicitará el contenido que desea POST. La cadena esperada debe tener un formato de cadena de consulta similar a este:
reptile=alligatorcolor=#008f68
Cuando hayas terminado de ingresar tu contenido, simplemente haz clic en CTRL-Dy el contenido se editará POST. El servicio en el que estamos publicando reflejará la solicitud:
{ "args": {}, "data": "", "files": {}, "form": { "color": "#008f68n", "reptile": "alligator" }, "headers": { "Content-Length": "32", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "lwp-request/6.39 libwww-perl/6.39" }, "json": null, "origin": "203.0.113.5", "url": "https://httpbin.org/post"}
HEAD
Como se mencionó, HEADno solo es extremadamente útil para depurar y solucionar problemas, sino que estoy bastante seguro de que está entre mis 5 utilidades de línea de comandos favoritas de todos los tiempos.
Similar a GETy POST, la sintaxis para HEADes bastante mínima:
- HEAD http://alligator.io/
Esto devolverá un 200 OKy la información sobre los encabezados devueltos por el servicio web.
Lamentablemente, esto no es del todo correcto, porque ofrecemos Alligator.io a través de HTTPS como los buenos internautas reptiles preocupados por la seguridad que somos.
El HEADcomando por defecto solo te da información sobre la última parada en la cadena de solicitudes. Para ver todas las solicitudes, incluida la automática 301 Moved Permanently, pasa el -Sargumento:
- HEAD -S http://alligator.io/
Lo que nos da un poco más de información:
OutputHEAD http://alligator.io/301 Moved PermanentlyHEAD https://alligator.io/200 OKCache-Control: public, max-age=0, must-revalidateConnection: closeDate: Sat, 29 Jun 2019 00:49:18 GMTAge: 1ETag: "8b85849c835909679fc1ba80b307d144-ssl"Server: NetlifyContent-Length: 0Content-Type: text/html; charset=UTF-8Client-Date: Sat, 29 Jun 2019 00:49:18 GMTClient-Peer: 203.0.113.1:443Client-Response-Num: 1Client-SSL-Cert-Issuer: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3Client-SSL-Cert-Subject: /CN=alligator.ioClient-SSL-Cipher: TLS_AES_256_GCM_SHA384Client-SSL-Socket-Class: IO::Socket::SSLStrict-Transport-Security: max-age=31536000X-NF-Request-ID: 60babe56-c0ea-4658-aa5a-3e185f1e851f-10342
Prima
¿La salida monocromática te molesta? Si es así, puedes usar el comando HTTPie como alias , y .httpGETPOSTHEAD
HTTPie puede hacer todo lo lwp-requestque hace la biblioteca, con una sintaxis similar y con la ventaja adicional de una salida colorida.
En sistemas derivados de Ubuntu y Debian puedes instalar HTTPie con los siguientes comandos:
- sudo apt update
- sudo apt install httpie
En distribuciones derivadas de Centos, Rocky Linux, Fedora y RedHat, puede instalar HTTPie utilizando los siguientes comandos, siempre que tenga EPEL:
- sudo dnf install epel-release
- sudo dnf install httpie
Mis alias locales se ven así:
- # HTTPie aliases
- alias GET='http'
- alias POST='http POST'
- alias HEAD='http HEAD'
Conclusión
La próxima vez que necesite realizar una solicitud de red a una API o esté solucionando problemas con los encabezados devueltos por un servidor, puede dejar Postman y herramientas similares en la puerta.
¡También puedes omitir tu navegador por completo!

Deja una respuesta