2010-01-02 6 views
0

J'utilise ce sous-programme Perl pour obtenir une ligne à partir d'une page Web, que je divise ensuite pour obtenir les informations dont j'ai besoin pour continuer. Cela a fonctionné pendant une douzaine d'années.Comment puis-je gérer les redirections HTTP dans mon application Perl?

sub capture_line { 

    my $page_to_get = $_[0]; 
    my $host_to_get_text = $_[1]; 
    my $port = 80; 
    my $buf = &HTTPGet($page_to_get, $host_to_get_text, $port); 
    my $image_capture_text; 
    my @lines = split(/\n/,$buf); 
#  print "$lines[1]\n"; 
#  print "$page_to_get, $host_to_get_text\n"; 
#  print "$buf\n"; 

    foreach (@lines) { 
     if (/$text_to_find/i) { 
      $image_capture_text = $_; 
    print "in_loop"; 
     last; 
     } 

    } 
    return $image_capture_text; 
} 

Unforntuately, $page_to_get est maintenant toujours une redirection 301 et $buf, lors de l'impression, me donne une page de redirection 301, qui ne contient évidemment pas le texte recherché. Y at-il une paire de valeur $in (par exemple) que je peux utiliser avec HTTPGet pour me sauter au-dessus de la redirection afin que j'obtienne la page que je vois quand je tape http://$host_to_get_text$page_to_get dans mon navigateur? Ou y a-t-il un meilleur moyen d'accomplir la même chose (connaissance d'un nom de fichier en constante évolution dans la source d'une page Web consultée)?

Nous vous remercions de votre temps. Greg Marsh

+2

Qu'est-ce que le module est HttpGet de? Vous devez obtenir l'en-tête 'Location' de la réponse et relancer la requête en utilisant ce lien. Je sais que d'autres objets comme 'HTTP :: Request' avec' LWP :: UserAgent' traiteront automatiquement les redirections, mais je ne suis pas sûr du module que vous utilisez. –

+3

La blague traditionnelle dans d'autres groupes de discussion est de dire "votre problème est dans la ligne 138 de votre sous-routine HTTPGet". Heureusement, les gens ne sont pas si grossiers ici. – AmbroseChapel

Répondre

7

D'où vient la fonction HTTPGet?

Si vous utilisiez LWP (http://search.cpan.org/dist/libwww-perl/) pour effectuer la récupération HTTP, les redirections suivront automatiquement (vous pouvez spécifier le nombre de fois que vous souhaitez suivre une redirection avant d'abandonner).

.: par exemple

use LWP::Simple qw() 
    my ($page_to_get, $host_to_get_text) = @_; 
    my $url = "http://$host_to_get_text$page_to_get"; 
    my $buf = LWP::Simple::get($url); 
    my $image_capture_text; 
    my @lines = split(/\n/,$buf); 
    # ...