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 curl
otras les encanta wget
. En mi caso, me encanta el paquete que proporciona comandos , y lwp-request
con nombres familiares . El tercero de la lista, , es algo que utilizo con bastante regularidad para solucionar problemas con los encabezados devueltos por los servidores.GET
POST
HEAD
HEAD
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-request
comando se puede invocar directamente con una serie de argumentos, pero repasaremos los scripts auxiliares que lo acompañan para simplificar.
GET
Si no lo tiene POST
y HEAD
está en su sistema, lo más probable es que pueda instalar el lwp-request
paquete 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 GET
al 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 GET
comando hace una cosa realmente bien y es GET
copiar 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 GET
comando nos permite consumir archivos de servidores remotos mientras POST
nos permite enviar datos a un servidor para su procesamiento y devolver su salida.
Como mínimo, la sintaxis POST
es 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-D
y 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ó, HEAD
no 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 GET
y POST
, la sintaxis para HEAD
es bastante mínima:
- HEAD http://alligator.io/
Esto devolverá un 200 OK
y 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 HEAD
comando 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 -S
argumento:
- 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 .http
GET
POST
HEAD
HTTPie puede hacer todo lo lwp-request
que 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