本文介绍利用JScript编写脚本,通过XMLHttpRequest获取远程文件内容,并结合ADODB.Stream组件将数据写入本地指定路径。该方案兼容不同版本的Internet Explorer环境,适用于Windows脚本宿主环境下的文件自动化下载任务。
JScript远程文件下载脚本实现
脚本使用示例:cscript this.js http://www.xxx.com/xxx.exe c:\xxx.exe
获取命令行参数对象:var objArgs = WScript.Arguments;
初始化ADODB.Stream对象用于处理二进制数据:var sGet=new ActiveXObject("ADODB.Stream");
声明变量xGet用于存储HTTP请求对象,初始值为false:var xGet = false;
开始尝试创建XMLHttpRequest对象:try {
尝试创建标准的XMLHttpRequest对象:xGet = new XMLHttpRequest();
}
若标准对象创建失败,捕获异常并尝试兼容旧版IE的Msxml2.XMLHTTP:catch (trymicrosoft) {
再次尝试创建Msxml2.XMLHTTP对象:try {
实例化Msxml2.XMLHTTP对象:xGet = new ActiveXObject("Msxml2.XMLHTTP");
}
若上述对象创建失败,捕获异常并尝试更旧版本的Microsoft.XMLHTTP:catch (othermicrosoft) {
再次尝试创建Microsoft.XMLHTTP对象:try {
实例化Microsoft.XMLHTTP对象:xGet = new ActiveXObject("Microsoft.XMLHTTP");
}
若所有尝试均失败,捕获异常:catch (failed) {
将xGet置为false表示创建失败:xGet = false;
}
}
}
若成功创建请求对象,打开GET请求,URL为第一个参数(转为小写),同步模式:xGet.Open ("GET",objArgs(0).toLowerCase(),0);
发送请求:xGet.Send();
设置流模式为二进制:sGet.Mode=3;
设置流类型为二进制数据:sGet.Type=1;
打开流对象:sGet.Open();
将HTTP响应体写入流:sGet.Write (xGet.ResponseBody);
将流内容保存到第二个参数指定的本地路径(转为小写):sGet.SaveToFile (objArgs(1).toLowerCase(),2);