5

我想编写一个脚本来登录 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,已找到,但没有数据。

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

4

3 回答 3

15

您可以为此目的使用WWW::Mechanize :

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

于 2009-06-22T19:31:23.677 回答
9

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

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

您为什么不使用WWW::Mechanize的任何原因?

于 2009-06-22T19:29:44.303 回答
1

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

  1. 如前所述,您可能需要使请求可重定向
  2. 您可能还需要启用 cookie: $ua->cookie_jar( {} );

希望这可以帮助

于 2010-06-15T06:23:58.973 回答