如何在Perl应用程序中处理HTTP重定向?

时间:2010-01-02 02:03:49

标签: perl http http-status-code-301

我使用这个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;
}

不幸的是,$page_to_get现在始终是301重定向,而$buf在打印时会给我一个301重定向页面,显然不包含所需的文本。是否有一个$in值对(例如)我可以与HTTPGet一起使用来跳过重定向,以便我在浏览器中输入http://$host_to_get_text$page_to_get时看到的页面?或者是否有更好的方法来完成相同的事情(知道在查看的网页的源中不断变化的文件名)?

感谢您的时间。 格雷格马什

1 个答案:

答案 0 :(得分:7)

HTTPGet函数来自何处?

如果您使用LWP(http://search.cpan.org/dist/libwww-perl/)进行HTTP提取,则会自动跟踪重定向(您可以指定在放弃之前您希望它遵循重定向的次数)。

e.g:

   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);
   # ...