2010-01-02 3 views
0

Я использую эту подпрограмму Perl, чтобы получить строку с веб-страницы, которую я затем разделил, чтобы получить информацию, требуемую для продолжения. Это проработало дюжину лет.Как я могу обрабатывать перенаправления HTTP в моем приложении 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 теперь всегда 301 редирект и $buf, при печати, дает мне страницу 301 переназначения, который, очевидно, не содержит искомый текст. Есть ли пара значений $in (например), которую я могу использовать с HTTPGet, чтобы пересказывать меня по перенаправлению, чтобы получить страницу, которую я вижу при вводе http://$host_to_get_text$page_to_get в свой браузер? Или есть лучший способ сделать то же самое (знать постоянно меняющееся имя файла в источнике просматриваемой веб-страницы)?

Спасибо за ваше время. Greg Marsh

+2

Какой модуль HttpGet от? Вам нужно получить заголовок 'Location' из ответа и переиздать запрос, используя эту ссылку. Я знаю, что другие объекты, такие как 'HTTP :: Request' вместе с' LWP :: UserAgent' будут автоматически обрабатывать перенаправления, но я не уверен, какой модуль вы используете. –

+3

Традиционная шутка в других дискуссионных группах заключается в том, чтобы сказать: «Ваша проблема в строке 138 вашей подпрограммы HTTPGet». К счастью, люди здесь не такие грубые. – AmbroseChapel

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^