会话流无效

时间:2014-09-11 08:15:24

标签: perl session

我正在尝试通过PERL提交表单。我已设法提交表单,但在表单提交后我收到一个显示“无效会话流”的HTML页面。如果我从浏览器提交,则新页面包含另一个表单。

我找不到该消息可能来的原因。如果我在服务器端没有任何访问权限,是否可以进行故障排除?或者必须从服务器端进行检查?

我的代码:

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>

通过任何浏览器提交的实际着陆页:

<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 个答案:

答案 0 :(得分:1)

浏览器可能正在发送您的LWP程序忽略的其他标头。当遇到这样的情况时,我发现最好的方法是使用浏览器插件,我喜欢Firefox的Live HTTP Headers跟踪实际的HTTP事务,然后更改我的程序以尽可能接近。