modulo Perl LWP

Aqui teneis una buena iniciacion a los modulos de perl http://perlenespanol.com/articulos/archivo/000134.html
A partir de aqui, mi intencion es recoger algunos modulos de la web CPAN e ir traduciendo. Estoy abierto a sugerencias, asi que seran bienvenidas, tambien seria una bueda opcion que avisarais de posibles fallos de traduccion o interpretacion.

Dicho esto, comanzamos. He decido comenzar por LWP.

1.NOMBRE
LWP. el Worls Wide WEb para la biblioteca Perl

2.SYNOPSIS
/......................./
use LWP;
print "Esta es libwww-perl-$LWP::VERSION\n";
/......................../

3.DESCRIPCION
El libwww son modulos de Perl para programacion de aplicaiones (API) para la World Wide Web. El objetivo principal es proporcionar las clases y funciones que permiten escribir clientes WWW. La biblioteca tambien contine modulos que son de uso general, e incluso clases que ayudan a implementar sencillos servidores HTTP.

Las principales caracteristicas son:
-Contiene varios componentes reutilizables (modulos) que pueden se utilizadas por separado o en conjunto.
-Proporciona un modelo orientado a objetos del estilo HTTP, compatibles con el accesoa HTTP, HTTPS, Gopher, FTP, noticias, archivos y recursos "mailto".
-Proporciona una interfac orientada aobjeto completo o una interfaz de procedimiento muy simple.
-Soporta los sistemas de autorizacion.
-Apoyo al redicionamiento .
-Apoyo al acceso a traves de servidores proxy.
-Proporciona un analizador de archivos "robots.txt" y un marco para la construccion de robots
-Soporte al analisis de los formularion HTTP.
-Implementa el algoritmo de negociacionde contenido de HTTP, que puede ser usado en los modulos de protocolo como en guiones de servidores(scripts CGI).
-Soporta cookies HTTP
-Algunos comandos de linea simples, como lwp-request y plw-download.

4.ESTILO DE COMUNICACION HTTP
La libreria libwww-perl esta basada en estilo de cominicacion HTTP. Esta seccion intenta describir lo principal.

Comencemos con esta cita del documento: http://www.w3.org/pub/WWW/Protocols/
-El protocolo HTTP se basa en el paradigma request/response. Un cliente establece una conexion con un servidor y envia un request al servidor en forma de metodo request, URI, y version de protocolo, seguido por un MIME-like que contiene los que contiene informacion del server, meta-info, y el contenido del posible cuerpo.

Lo que esto significa para libwww-perl, es que la comunicacion siempre es asi: primero se crea y configura el objeto solicitado, despues este se pasa al servidor y recibimos el objeto respuesta que podemos examinar.Una petcion siempre es independiente de las solicitudes anteriores. Este modelo siempre es el mismo para cualquier servicio que queramos acceder.

Por ejemplo, si quermos un documento de un servidor de archivos, enviamos una peticion que contenga el nombre del documento, y la respuesta contendra el propio documento.Si tenemos acceso a un motor de busqueda, entonces el contenido de la peticion contrendra los parametros de la consulta, y la respuesta el resultado de la consulta. Si quieres enviar un mensaje de correo, enviamos un objeto de solicitud, que contenga nuestro mensaje al servidor de correo, y el objeto de respuestra contendra un reconocimiento que nos dira que el correo ha sido aceptado y se remitira al destinatario.

5.EL OBJETO REQUEST
En libwww-perl el objeto de solicitud tiene el nombre de clase HTTP::Request. El hecho de que el nombre de la clase utilizada sea HTTP:: comoun prefijo, imploca que solo se utilize el modelo de comunicacion HTTP. No se limita solo a este tipo de servicios. Por ejemplo tambien podemos enviar HTTP::Request a servidores FTP y gopher, asi como al sistema de archivo local.

Los principales atributos de peticion de este objeto son:
- El "method" es una cadena corta que dice el tipo de peticion. los tipos mas comunes son: GET, PUT, POST y HEAD
- El "URI" es una cadena que define el protocolo, servidor y nombre del documentoal que desea acceder. La URI tambien puede codificar otros parametros.
- Las "HEADERS" contienen informacion adicional soble la solicitud, tambien pueden utilizarse para describir el contenido. Las cabeceras son u conjunto de pares keyword/value.
- El "content" (contenido) es una cantidad arbitraria de datos.

6. EL OBJETO RESPONSE
En libwww-perl el objeto response tiene un nombre de clase HTTP::Response. Los principales atributos de esta clase de objeto son:
- El "code" es un valor numerico que indica el resultado global de la peticion.
- El "message" es una breve cadena para los humanos que se corresponde con el codigo.
- Los "headers" contienen informacion adicional acerca de la respuesta, y describe el contendido.
- El "content" es una cantidad arbritaria de datos.

Dado que no queremos manejar todos los valores de codigo posibles, libwww-perl puede usar los siguientes metodos:

- is_success () la solicitud fue recibida con exito, entendida o aceptada.
- is_error () error de la solicitud. El servidor o el recurso puede no estar disponible, u tener otros problemas.

7.EL "USER AGENT"
Supongamos que hemos creado un request object "objeto de solicitud". Que es lo hacemos para recibir una respuesta?

La respuesta que pasamos al objeto agente de usuario "user agent" y este objeto se encarga de todo lo que necesitas hacer (como la comunicacion de bajo nivel y el manejo de errores) y devuelve un objeto respuesta. El USER AGENT representa nuestra aplicacion en la red y nosproporciona una interfaz que acepta las peticiones y las respuestas remotas.

El "user agent" es una interface de capa entre el codigo de aplicacion y la red. A traves de esta interface es capaz de acceder a los distintos servicios de la red.

El nombre de esta clase LWP::UserAgent. Todas las aplicaciones libwww-perl deben contener este objeto para poder comunicarse. El principal metodo de este objeto es request(). Este metodo tiene un HTTP::Request objeto como argumento y eventualmente devuelve un objeto HTTP::Response.

El "user agent" tiene mas atributos que le permiten configurar la forma de interactuar con la red y con la aplicacion.

- El "timeout" especifica cuanto tiempo nos daran los servidores remotos para responder antes de ser desconectados, y crea un tiempo de espera de la respuesta interna.

- El "agent" especifica el nombre que nuestra aplicacion utilizara cuando se presente a la red.

- El atributo "from" puede configurar la direccion mail del responsable del programa.

- El "parse_head" especifica si se deben iniciar las cabeceras de respuesta de la seccion del documento HTML.

- Los atributos "proxy" y "no_proxy" especifican si debemos y cuando pasar por un proxy

- Las "credentials" proporcinan una forma de crear nombres de usuarios y contraseñas necesarias para acceder a distintos servicios.

Muchas aplicaciones quieren tener mas control sobre la interaccion con la red. Contamos con la sub-clase LWP::RobotUA, para aplicaciones de robots.

Esta sin terminar, pero no podia esperar mas, estaba impaciente por participar.