OVH Cloud OVH Cloud

url finale

2 réponses
Avatar
Fabrice L.
bonjour,

j'utilise ce script pour recuperer la source d'une page web

---------
use LWP::Simple;
use strict;

print "Content-type: text/html\n\n";

my $url = "http://monsite.com/redirect.php?site=random";

my $html=get($url);

print $html;
----------

http://monsite.com/redirect.php?site=random <== ouvre un site de facon
aléatoire et c'est bien ce site dont je recupere la source, ce que implique
que LWP a été redirigé vers l'url finale mais mon probleme est :

comment connaitre cet url finale ?

Si kkun a une idée, je suis preneur !

merci d'avance

Fabrice

2 réponses

Avatar
Paul Gaborit
À (at) Tue, 30 Nov 2004 12:04:00 +0100,
"Fabrice L." écrivait (wrote):
j'utilise ce script pour recuperer la source d'une page web
---------
use LWP::Simple;
use strict;

print "Content-type: text/htmlnn";
my $url = "http://monsite.com/redirect.php?site=random";
my $html=get($url);
print $html;
----------

http://monsite.com/redirect.php?site=random <== ouvre un site de facon
aléatoire et c'est bien ce site dont je recupere la source, ce que implique
que LWP a été redirigé vers l'url finale mais mon probleme est :

comment connaitre cet url finale ?

Si kkun a une idée, je suis preneur !


Dans la doc de LWP::Simple, on peut lire :

If you need more control or access to the header fields in the requests
sent and responses received, then you should use the full
object-oriented interface provided by the "LWP::UserAgent" module.

Il faut donc utiliser LWP::UserAgent. Le petit script ci-desous doit pouvoir
vous servir de point de départ :

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

my $url = "http://monsite.com/redirect.php?site=random";
my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => $url);
my $response = $ua->simple_request($request);
if ($response->is_success) {
print $response->headers->as_string;
print $response->content;
} else {
die $response->status_line;
}

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Fabrice L.
merci m. gaborit pour votre réponse on ne peut plus claire et explicite (une
marque de fabrique :) )

Cependant, comme je ne suis pas resté les doigts croisés à attendre qu'on me
donne la réponse, j'ai continué a chercher et j'en suis arrivé aux memes
conclusions que vous, il fallait utiliser LWP::UserAgent

et apres plusieurs essais, ceci marche fort bien :
----
use strict;
use LWP::UserAgent;
use HTTP::Request;

my $url = "http://monsite.com/redirect.php?site=random";

my $ua = new LWP::UserAgent;
my $request= new HTTP::Request('GET', "$url" );
my $res = $ua->request($request);

my $url_finale = $res->base;

print $url_finale;
-----

(j'ai ommis volontairement la verification is_success afin de faire rapide)

J'allais poster ma solution quand j'ai lu votre réponse, dsl du dérangement
et merci pour votre coup de main !

C U

Fabrice






"Paul Gaborit" a écrit dans le message de
news:

À (at) Tue, 30 Nov 2004 12:04:00 +0100,
"Fabrice L." écrivait (wrote):
j'utilise ce script pour recuperer la source d'une page web
---------
use LWP::Simple;
use strict;

print "Content-type: text/htmlnn";
my $url = "http://monsite.com/redirect.php?site=random";
my $html=get($url);
print $html;
----------

http://monsite.com/redirect.php?site=random <== ouvre un site de facon
aléatoire et c'est bien ce site dont je recupere la source, ce que
implique


que LWP a été redirigé vers l'url finale mais mon probleme est :

comment connaitre cet url finale ?

Si kkun a une idée, je suis preneur !


Dans la doc de LWP::Simple, on peut lire :

If you need more control or access to the header fields in the
requests

sent and responses received, then you should use the full
object-oriented interface provided by the "LWP::UserAgent" module.

Il faut donc utiliser LWP::UserAgent. Le petit script ci-desous doit
pouvoir

vous servir de point de départ :

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

my $url = "http://monsite.com/redirect.php?site=random";
my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => $url);
my $response = $ua->simple_request($request);
if ($response->is_success) {
print $response->headers->as_string;
print $response->content;
} else {
die $response->status_line;
}

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>