- 论坛徽章:
- 0
|
# auto_mb_download.pl
# written by vulgatecn@msn.com
# 2006.2.07
# 自动下载微软网络广播的东东
#
# 流程介绍
# 先访问 http://www.microsoft.com/china/technet/webcasts/download.mspx
# 获取下载列表
# 然后访问http://www.mswebcast.com.cn/technet/alogin.aspx
# 登陆后,获得session,
# 用session访问http://www.mswebcast.com.cn/technet/dload.aspx?id
# 获得实际下载地址
# 产生批处理文件,然后用wget下载
#
# 要求安装wget,并且在path指明wget的路径
# 执行批处理时,每个教学内容,会建立一个文件夹,该文件夹保存下载课程录像
# 程序中需要自己添加微软网络广播的帐号
# 使用方法
# auto_mb_download.pl > download.bat
# download.bat
#
require HTTP::Request;# load http module
require HTTP::Response;
require LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common;
use LWP::Simple;
use HTTP::Cookies
$|=1;
use Socket;
use Getopt::Std;
$host="www.mswebcast.com.cn";
$port=80;
$base_dir="d:\\mswebcast";
$account='';
$pass='';
$list_url="http://www.microsoft.com/china/technet/webcasts/download.mspx";
$login_url="http://www.mswebcast.com.cn/technet/alogin.aspx";
$ua = LWP::UserAgent->new;
$cookie='__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=dDwtMTY2ODcwMjM2O3Q8O2w8aTwwPjs%2BO2w8dDw7bDxpPDk%2BOz47bDx0PHA8O3A8bDxvbmNsaWNrOz47bDxyZXR1cm4gQ2hlY2t0aGlzbG9naW5hbG9naW4oKTs%2BPj47Oz47Pj47Pj47bDxCdXR0b24xOz4%2BdLCLxKcmSbg6mKxAn8cpqxq7ENo%3D&View=zh-cn&charset=gb2312&qu=&TextBox1='.$account.'&Textbox2='.$pass.'&Button1.x=24&Button1.y=8';
$req0 =
"POST /technet/alogin.aspx?id=down&tid=msft011306vxpm HTTP/1.1\n".
"Host: www.mswebcast.com.cn\n".
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1\n".
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n".
"Accept-Language: en-us,en;q=0.5\n".
"Accept-Encoding: gzip,deflate\n".
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n".
"Keep-Alive: 300\n".
"Connection: keep-alive\n".
"Referer: http://www.mswebcast.com.cn/tech ... ;tid=msft011306vxpm\n".
"Content-Type: application/x-www-form-urlencoded\n".
"Content-Length: ".length($cookie)."\n\n".
$cookie."HTTP/1.1 302 Found";
print "\n";
@tts=sendraw($req0);
$content=@tts;
foreach(@tts){
$content=$content.$_;
}
$content=~/(ASP.NET_SessionId=.+);/;
$cookie=$1;
#print "Get cookie $cookie \n";
####################################
#
# ËùÓÐÐèÒªÏÂÔØµÄÁбí,ÏÂÔØ±àºÅºÍÄÚÈÝÃû³Æ
#
####################################
my $req = HTTP::Request->new('GET' => $list_url);
my $res = $ua->request($req);
$content=$res->as_string;
#$filter='href="http://www.mswebcast.com.cn/technet/alogin.aspx?id=down&tid=(*.)" target="_blank">(.*)</a>';
#" target="_blank">
#·Ö¸î
@con_list = split(/tid=/, $content);
foreach (@con_list) {
if($_=~/([^".]+).+_blank">([^\/.]+)<\/a>/){
$file_url=$1;
#print $file_url."\n";
$name=$2;
#³ýÈ¥¶àÓàµÄ¿Õ¸ñ;
$name=~s/^\s+//;
$name=~s/\s+$//;
#print $name."\n";
#·ÅÈëhashÖÐ
$all_list{$file_url}=$name;
}
}
while ( ($k,$v) = each %all_list ) {
#print "$k => $v\n";
$request = (POST 'http://www.mswebcast.com.cn/technet/dload.aspx?id='.$k,
Host => 'www.mswebcast.com.cn',
cookie => $cookie,
Connection => 'Keep-Alive',
);
$response = $ua->request($request);
$content=$response->content;
$content=~m/(http:\/\/download.microsoft.com\/.+zip)">http/;
$file_url=$1;
print "mkdir \"$base_dir\\$v\"\n";
print "wget $file_url -O \"$base_dir\\$v\\$k.zip\"\n";
}
#ºÜԭʼµÄ·¢ËÍquest³ÌÐò
sub sendraw {
my ($req) = @_;
my $target;
$target = inet_aton($host) || die("inet_aton problems\n");
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) || die("Socket problems\n");
if(connect(S,pack "SnA4x8",2,$port,$target)){
select(S);
$| = 1;
print $req;
my @res = <S>;
select(STDOUT);
close(S);
return @res;
}
else {
die("Can't connect...\n");
}
} |
|