通过LWP登录Way2sms失败

时间:2012-08-25 16:57:08

标签: perl login lwp lwp-useragent

我正在尝试通过LWP登录Way2sms。页面的源代码表示登录表单(在这种情况下,似乎是正文中所有内容的根节点)的动作属性为'',我在其他一些Stackoverflow帖子中读到,指向包含该表单的页面的URL。移动密码和密码字段的name属性可从源代码中获得,因此我尝试了这个:

use URI;
use HTML::TreeBuilder;
use LWP;
open f, "> way2sms.txt";
$browser = LWP::UserAgent->new(agent=>'Mozilla/4.76 [en] (Windows NT 5.0; U)');
$resp = $browser->post("http://site2.way2sms.com/content/index.html",[username=>$username,password=>$password]);
if ( $resp->is_redirect ) {
    $resp = $browser->get( $resp->header('Location') );
}

print f $resp->content;
close f;

使用正确的电话号码和密码,提交应返回个性化页面,其中包含欢迎,Kaustav Mukherjee 等消息。很自然地,我希望代码打印出来5.但是,虽然打印出 Logged 表示成功,但是5不打印出来,表明登录失败。怎么做? (请不要建议使用Mechanize!)

1 个答案:

答案 0 :(得分:1)

您获得的回复是302 Moved Temporarily,而不是200 OK。因此,您需要获取新页面的内容,而不是重定向响应的内容。

#!/usr/bin/env perl

use strict;
use warnings;

use LWP::UserAgent;

my $ua = LWP::UserAgent->new(
    agent =>
      'Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1',
    cookie_jar => {},
);
my $response = $ua->post(
    'http://site2.way2sms.com/Login1.action',
    {
        username => '1234567890',
        password => 'topsecret',
    }
);
if ( $response->is_redirect ) {
    $response = $ua->get( $response->header('Location') );
    print $response->decoded_content;
}

对您的代码的一些评论: