我正在尝试通过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
!)
答案 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;
}
对您的代码的一些评论:
use strict;
和use warnings;
use autodie;
或手动检查open
是否成功open
open my $fh, …
)use warnings;
会警告您)