LWP::Simple

Table of contents

  1. Obtener contenido (GET)
    1. getprint
  2. Peticion POST
  3. Obtener encabezados
    1. Obtener codigo de estado

LWP:Simple es un modo que permite hacer peticiones de la manera mas simplificada con la desventaja que no tenemos tanto control sobre los encabezados y la peticion

Obtener contenido (GET)

La manera mas facil es usando el metodo get(url), regresa el contenido (string) si la petición se hizo correctamente, y undefsi no se pudo hacer

use LWP::Simple;

my $respuesta = get("https://ic4rta.github.io/");
print $respuesta;

Si se desea verificar si la peticion se hizo correctamene podemos hacerlo de las siguientes formas

if

Podemos hacer un if, para verificar si la respuesta no tiene contenido o es false

use LWP::Simple;

my $respuesta = get("https://ic4rta.github.i/");

if ($respuesta){
	print $respuesta;
}else{
	die "No se pudo hacer la peticion";
}

Operador ?

Otra forma es usando el operador ternario, que ya vimos como funciona en la parte de condicionales

(defined $respuesta) ? print $respuesta : die "No se pudo hacer la peticio";

Primero con defined se verifica si $respuesta esa definida, es decir, si tiene algun valor, en caso de que sea true, hace el print, si no, ejecuta el die

unless

En este primera forma si $respuesta esta definida (true), la condicion unless defined $respuesta; sera falsa y el script continua la ejecucion. Si $respuestano esta definida (false, es undef), la condicion unless defined $respuesta; se evalua como verdadera y se ejecuta el die

die "No se pudo hacer la peticion" unless defined $respuesta;

Otra forma se usar unlessse una manera mas legible es:

unless ($respuesta){
	die "No se pudo haecr la peticion"
}
unless ($respuesta) { die "No se pudo haecr la peticion" } #lo mismo

getprint

Este metodo hace una peticion GET y imprime su contenido en el STDOUT, este metodo solo es util cuando se desea obtener de manera rapida el contenido y no se quiere procesar la peticion antes

getprint("https://ic4rta.github.io")

Peticion POST

Podemos usar el modulo LWP::Simple::Post, sin embargo, la propia documentacion no recomienda usar ese modulo ya que tiene mas desventajas que LWP::UserAgent

use LWP::Simple::Post qw(post);
use JSON;

my $url = "https://jsonplaceholder.typicode.com/posts";

my $datos = {
    "userID" => 1,
    "id" => 1,
    "title" => "Una peticion post",
    "body" => "ola"
};

my $datos_json = encode_json($datos);
print post($url, $datos_json);

El metodo post devuelve undefsi fue fallido, en este caso se usa el modulo JSON por que la URL espera un JSON

Obtener encabezados

Para trabajar con encabezados usamos el metodo head(url), esto retorna 6 valores en una lista si se realiza correctamente: content_type, document_length, modified_time, expires, server y code, en el contexto de valores escalares, regresa true si es satisfactoria

Obtener codigo de estado

use LWP::Simple;

my $url = "https://ic4rta.github.io/";
my $encabezados = head($url);
print $encabezados->code;

Si queremos combinar una peticion GET y verificar el codigo de estado con un if podemos hacer esto

use LWP::Simple;

my $url = "https://ic4rta.github.io/";

my $encabezados = head($url);
my $respuesta = get($url);

if ($encabezados->code == 200){
	print $respuesta;
}

Tambien podemos llamar directamente la funcion headsin necesidad de asignar el valor de regreso a una variable, para acortar codigo es recomendable aun que la claridad puede ser mas “complicada”

use LWP::Simple;

my $url = "https://ic4rta.github.io/";
my $respuesta = get($url);

if (head($url)->code == 200){
	print $respuesta;
}

Con unless

use LWP::Simple;

my $url = "https://ic4rta.github.io/";
my $respuesta = get($url);

unless (head($url)->code == 200){
	die "El codigo de estado no es 200"; #sale del script
}

print $respuesta;