上回我写过了一篇文章,在《大耳朵英语》的播客上,批量获取MP3地址。后来发现将这些MP3地址
导入迅雷批量下载都会失败,后来调试了一下程序发现,原来是因为大耳朵英语网站上下载MP3是有用户
鉴权的,而且有cookies校验。
所以这次决定再写一段程序,实现下载功能。
#!/use/bin/perl -w
use strict;
use warnings;
use HTTP::Cookies;
use LWP::UserAgent;
use Data::Dumper;
my $login_url = 'http://www.ebigear.com/?module=member&act=login';
my $username = 'acefei';
my $passwd = 'Ebe!123';
my %login_form = (
MemberName => $username,
Pwd => $passwd,
);
my $ie = LWP::UserAgent->new;
# 获得COOKIE
my $response = $ie->get($login_url);
my $cookie;
my $cookie_jar;
my @cookies;
if ( $response->is_success ) {
$cookie_jar = HTTP::Cookies->new(file =>"cookies", autosave => 1, ignore_discard => 1);
}
# 登录
$ie->default_header('Referer'=>$login_url);
$ie->cookie_jar($cookie_jar);
$response = $ie->post( $login_url, \%login_form);
if ( $response->as_string =~ /bigear_name=$username/) {
print "login successful!\n";
}
else {
print "login error!\n";
}
# 登录成功后页面请求
$ie->cookie_jar($cookie_jar); #此时的$cookie_jar已经发生更新了
$response =
$ie->get('http://www.ebigear.com/?module=resource&act=getdownurl&method=http&md5Code=%2Foral%2Fpc%2F2012%2F01%2F18%2F1326842908_3065994.mp3',
':content_file' => 'faith.mp3'
);
#如果使用$ie->request来获取网页,保存成文件,可以写成
#$ie->request(GET($url), 'faith.mp3');
#这里不推荐用以下方式来保存MP3,
#因为最后生成的文件效果不好,
#还有些格式出错,不能播放
#open my $fh, '>', 'faith.mp3';
#print $fh $response->content;
#close $fh;
$response =$ie->get('http://www.ebigear.com/?module=resource&act=getdownurl&method=http&md5Code=%2Foral%2Fpc%2F2012%2F01%2F18%2F1326842908_3065994.mp3',':content_file' => 'faith.mp3');这一行结合上一篇生成的MP3地址文件,可以在外面套一层循环读文件,来实现批量下载的功能。