2009-06-22 89 views
5

我想编写一个脚本来登录到Web应用程序,然后移动到其他地区的应用程序的 :如何使用Perl的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找到的,但没有数据。

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

回答

15

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

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

9

我猜LWP没有遵循重定向:

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

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

1

我已经使用LWP登录到大量的网站和做内容的东西,所以应该没有问题做你想做的。您的代码看起来不错,但她的两件事情我会建议:

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

希望这会有所帮助

相关问题