2014-09-11 5 views
0

Я пытаюсь отправить форму PERL. Мне удалось отправить форму, но я получаю HTML-страницу, показывающую «Invalid Session Flow» после отправки формы. Если я отправлю из браузера, новая страница содержит другую форму.Неверный сеанс потока

Я не мог найти причину, по которой это сообщение может прийти. Можно ли устранить неполадки, если у меня нет доступа на стороне сервера? Или это нужно проверить со стороны сервера?

Мой код:

my $url = "https://MY_URL"; 
my $Browser = new LWP::UserAgent(); 
$Browser->ssl_opts(verify_hostname => 0,SSL_verify_mode => 0x00); 
my $page = $Browser->get($url); 
my $content = HTML::TreeBuilder->new_from_content($page->decoded_content) or die $!; 
my $match = $content->find_by_attribute('name' => 'token'); 
my $token = $match->attr('value'); 
chomp($token); 
my %fileds = ("DATA" => "STD111","token" => $token); 
my $Page = $Browser->request(POST $url,\%fileds); 
if ($Page->is_success){ 
    print $Page->status_line."\n"; 
    print $Page->content."\n"; 
}else{ 
    print $Page->status_line."\n"; 
    print $Page->message; 
} 

Ниже источники просмотренных страниц из FireFox

Начальная страница:

<html> 
<head> 
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1"> 
<title>Website Title</title> 
</head> 
<body> 
    <form method="post" action="/">    
     <input type="hidden" name="token" value="5f75b4fb68ed"> 
     <input name="stdname"> 
     <input type="submit" value="Submit">      
    </form> 
</body> 
</html> 

Выход я получаю:

200 OK 
<html> 
<head> 
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1"> 
<title>Website Title</title> 
</head> 
<body> 
    <form method="get" action="/"> 
     ERROR: Invalid session flow<br> 
     <input type="submit" value="Relogin"> 
    </form> 
</body> 
</html> 

Фактическая страница Landing при представлении с помощью любого браузера:

<html> 
<head> 
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1"> 
<title>Website Title</title> 
</head> 
<body> 
    <form method="post" action="/"> 
     <input type="hidden" name="token" value="5f75b4fb68ed"> 
     <input type="password" name="stdpass"> 
     <input type="submit" value="Submit"> 
    </form> 
</body> 
</html> 
+1

Для обработки форм я предлагаю использовать ['WWW :: Mechanize'] (https://metacpan.org/pod/WWW::Mechanize). – Miller

ответ

1

Вполне вероятно, что браузер посылает другие заголовки, которые опуская ваш LWP программа. Когда я сталкиваюсь с такой ситуацией, я считаю, что лучше всего использовать браузерный плагин, который мне нравится Live HTTP Headers для Firefox), который отслеживает фактическую транзакцию HTTP, а затем меняет мою программу, чтобы как можно ближе к ней.

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