2010-01-02 49 views
0

我使用這個Perl子程序從網頁中獲取一行,然後我分割以獲取我需要的信息。這已經工作了十幾年。如何在我的Perl應用程序中處理HTTP重定向?

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永遠是現在301重定向和$buf,打印時,給了我301重定向頁面,這顯然不包含文本的追捧。是否有$in值對(例如),我可以使用HTTPGet來跳過重定向,以便在我的瀏覽器中鍵入http://$host_to_get_text$page_to_get時看到我看到的頁面?或者是否有更好的方法來完成同樣的事情(知道瀏覽網頁源代碼中不斷變化的文件名)?

謝謝你的時間。 Greg Marsh

+2

什麼模塊HTTPGET而來?您需要從響應中獲取「位置」標題,並使用該鏈接重新發出查詢。我知道像'HTTP :: Request'和'LWP :: UserAgent'這樣的其他對象會自動處理重定向,但我不確定你正在使用哪個模塊。 – 2010-01-02 02:16:29

+3

其他討論組中的傳統笑話是說「你的問題在你的HTTPGet子例程的第138行」。幸運的是,人們在這裏沒有那麼粗魯。 – AmbroseChapel 2010-01-02 08:05:50

回答

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); 
    # ... 
相關問題