如何使用Perl的LWP登录Web应用程序?

时间:2009-06-22 19:16:51

标签: perl www-mechanize lwp

我想编写一个脚本来登录Web应用程序,然后转到其他部分 申请:

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use Data::Dumper;

$ua = LWP::UserAgent->new(keep_alive=>1);

my $req = POST "http://example.com:5002/index.php",
[ user_name     => 'username',
  user_password => "password",
  module        => 'Users',
  action        => 'Authenticate',
  return_module => 'Users',
  return_action => 'Login',
];

my $res = $ua->request($req);
print Dumper(\$res);
if ( $res->is_success ) {
    print $res->as_string;
}

当我尝试此代码时,我无法登录该应用程序。返回的HTTP状态代码是找到的302,但没有数据。

如果我发布了包含所有必需内容的用户名/密码,那么它应该返回应用程序的主页并保持连接状态以移动应用程序的其他部分。

3 个答案:

答案 0 :(得分:15)

您可以将WWW::Mechanize用于此目的:

  

Mech支持执行一系列页面提取,包括以下链接和提交表单。解析每个获取的页面并提取其链接和表单。可以选择链接或表单,填写表单字段并可以获取下一页。 Mech还会存储您访问过的URL的历史记录,可以查询和重新访问。

答案 1 :(得分:9)

我猜测LWP没有遵循重定向:

push @{ $ua->requests_redirectable }, 'POST';

您没有使用WWW::Mechanize的原因?

答案 2 :(得分:1)

我已经使用LWP登录到大量网站并对内容进行处理,所以做你想做的事情应该没问题。到目前为止,你的代码看起来不错,但我建议你做两件事:

  1. 如上所述,您可能需要使请求可重定向
  2. 您可能还需要启用Cookie: $ ua-> cookie_jar({});
  3. 希望这有帮助