• Publicidad

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

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

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

Notapor netsoul » 2008-05-04 01:34 @107

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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. ;) 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.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Publicidad

Notapor explorer » 2008-05-04 04:55 @247

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use LWP::Simple;
my $pagina = get('http://www.google.com/');
print $pagina;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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 viewtopic.php?p=11157#11157 tienes un ejemplo de petición con cabecera HTTP personalizada.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor netsoul » 2008-05-05 18:23 @807

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.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 23 invitados