Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Una petición HTTP de solo una parte de un recurso

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Dom May 04, 2008 12:34 am
netsoul
Perlero Nuevo
Perlero Nuevo
Registrado: 04 May 2008
Mensajes: 33
Una petición HTTP de solo una parte de un recurso Responder citando

Hola, ¿cómo están?... Soy nuevo aquí y agradezco por tener esta oportunidad de ser un miembro de este prestigioso sitio.

Agradecido estoy y me gustaría resolver un problema.

Resulta que quisiera hacer una petición HTTP a un sitio y que me devuelva solamente un cierto contenido especifico.

Me había rebuscado en Google y he encontrado este sencillo código:

Perl:
#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;
use HTTP::Request;

my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");

my $url = "http://www.google.com/";

my $req = HTTP::Request->new(GET => $url);
my $response = $ua->request($req);
my $content = $response->content();

print $content;


Como se puede observar en my $url le he añadido a Google como experimento.

Como resultado me devuelve un montón de código HTML. Wink Mi pregunta es si la solución es solamente filtrando todo ese contenido HTML. Por ejemplo: si quiero que me devuelva el contenido "©2008 Google" solo usare una subrutina de filtro posterior al código y como resultado único: "©2008 Google".

La cuestión es si existe alguna otra posibilidad porque teóricamente todo ese contenido recibido semi-despreciable consumiría el ancho de banda.

Agradecido estoy y perdón si la pregunta está a medias.

Gracias.
Mensaje Dom May 04, 2008 3:55 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4036
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español, netsoul.

De forma general, el protocolo HTTP devuelve el recurso entero, por lo que la respuesta a tu pregunta sería sí: hay que bajarse todo el recurso, toda la página, y luego filtrar por el contenido que quieres buscar.

Una forma más simple de hacerlo es con LWP::Simple:

Perl:
use LWP::Simple;
my $pagina = get('http://www.google.com/');
print $pagina;


Pero, no tiene porqué ser así. Si tienes alguna pista de en qué parte se encuentra lo que quieres, puedes agregar a la cabecera HTTP un atributo 'Content-Range' en la que le indicas esa parte (ver sección 14-16 del RFC 2616 del protocolo HTTP). Para hacer este tipo de peticiones, ya no te vale con el LWP::Simple. En http://perlenespanol.baboonsoftware.com/foro/viewtopic.php?p=11157#11157 tienes un ejemplo de petición con cabecera HTTP personalizada.
Mensaje Lun May 05, 2008 5:23 pm
netsoul
Perlero Nuevo
Perlero Nuevo
Registrado: 04 May 2008
Mensajes: 33
Responder citando

Muy agradecido. Agradezco por el esfuerzo y ánimo. Es exactamente lo que estaba buscando. Una respuesta clara, precisa, perfecta y excelente.

Estaré mirando los códigos de ejemplos de petición HTTP con cabecera personalizada y también trataré de hacer algo parecido, aunque mi idea es algo simple.

Gracias.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group