0

この Perl サブルーチンを使用して Web ページから行を取得し、それを分割して続行するために必要な情報を取得します。これは十数年間機能しています。

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ために使用できる値のペア (たとえば)はありますか? または、同じことを達成するためのより良い方法はありますか (表示された Web ページのソースで絶えず変化するファイル名の知識)?HTTPGethttp://$host_to_get_text$page_to_get

お時間をいただきありがとうございます。グレッグ・マーシュ

4

1 に答える 1

7

関数はどこHTTPGetから来ていますか?

LWP ( http://search.cpan.org/dist/libwww-perl/ ) を使用して HTTP フェッチを行う場合、自動的にリダイレクトをたどります (リダイレクトをたどる前に何回リダイレクトをたどるかを指定できます)。あきらめる)。

例えば:

   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);
   # ...
于 2010-01-02T02:09:27.467 に答える