Windows HTTP Services 参考资料
2009年12月14日
参考:http://msdn2.microsoft.com/en-us/library/aa384273(VS.85).aspx
WinHttp; // Microsoft WinHTTP Services, version 5.1
Alias HTTPREQUEST_PROXY_SETTING;
I4
Alias HTTPREQUEST_SETCREDENTIALS_FLAGS;
I4
Enum WinHttpRequestOption; // WinHttpRequest Options
GUID={12782009-FE90-4877-9730-E5E183669B19};
WinHttpRequestOption_UserAgentString = 0;
WinHttpRequestOption_URL = 1;
WinHttpRequestOption_URLCodePage = 2;
WinHttpRequestOption_EscapePercentInURL = 3;
WinHttpRequestOption_SslErrorIgnoreFlags = 4;
WinHttpRequestOption_SelectCertificate = 5;
WinHttpRequestOption_EnableRedirects = 6;
WinHttpRequestOption_UrlEscapeDisable = 7;
WinHttpRequestOption_UrlEscapeDisableQuery = 8;
WinHttpRequestOption_SecureProtocols = 9;
WinHttpRequestOption_EnableTracing = 10;
WinHttpRequestOption_RevertImpersonationOverSsl = 11;
WinHttpRequestOption_EnableHttpsToHttpRedirects = 12;
WinHttpRequestOption_EnablePassportAuthentication = 13;
WinHttpRequestOption_MaxAutomaticRedirects = 14;
WinHttpRequestOption_MaxResponseHeaderSize = 15;
WinHttpRequestOption_MaxResponseDrainSize = 16;
WinHttpRequestOption_EnableHttp1_1 = 17;
WinHttpRequestOption_EnableCertificateRevocationCheck = 18;
Enum WinHttpRequestAutoLogonPolicy;
GUID={9D8A6DF8-13DE-4B1F-A330-67C719D62514};
AutoLogonPolicy_Always = 0;
AutoLogonPolicy_OnlyIfBypassProxy = 1;
AutoLogonPolicy_Never = 2;
Enum WinHttpRequestSslErrorFlags;
GUID={152A1CA2-55A9-43A3-B187-0605BB886349};
SslErrorFlag_UnknownCA = $100;
SslErrorFlag_CertWrongUsage = $200;
SslErrorFlag_CertCNInvalid = $1000;
SslErrorFlag_CertDateInvalid = $2000;
SslErrorFlag_Ignore_All = $3300;
Enum WinHttpRequestSecureProtocols;
GUID={6B2C51C1-A8EA-46BD-B928-C9B76F9F14DD};
SecureProtocol_SSL2 = 8;
SecureProtocol_SSL3 = 32;
SecureProtocol_TLS1 = 128;
SecureProtocol_ALL = 168;
Dispatch IWinHttpRequest; // IWinHttpRequest Interface
GUID={016FE2EC-B2C8-45F8-B23B-39E53A75396B};
function QueryInterface(riid:^GUID; out ppvObj:^^void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:^UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
function SetProxy(ProxySetting:HTTPREQUEST_PROXY_SETTING; [ProxyServer:variant; BypassList:variant]);
function SetCredentials(UserName:BSTR; Password:BSTR; Flags:HTTPREQUEST_SETCREDENTIALS_FLAGS);
function Open(Method:BSTR; Url:BSTR; [Async:variant]);
function SetRequestHeader(Header:BSTR; Value:BSTR);
function GetResponseHeader(Header:BSTR): BSTR;
function GetAllResponseHeaders: BSTR;
function Send([Body:variant]);
property-get Status: I4;
property-get StatusText: BSTR;
property-get ResponseText: BSTR;
property-get ResponseBody: variant;
property-get ResponseStream: variant;
property-get Option(Option:WinHttpRequestOption): variant;
property-put Option(Option:WinHttpRequestOption; variant);
function WaitForResponse([Timeout:variant]): bool;
function Abort;
function SetTimeouts(ResolveTimeout:I4; ConnectTimeout:I4; SendTimeout:I4; ReceiveTimeout:I4);
function SetClientCertificate(ClientCertificate:BSTR);
function SetAutoLogonPolicy(AutoLogonPolicy:WinHttpRequestAutoLogonPolicy);
Interface IWinHttpRequestEvents; // IWinHttpRequestEvents Interface
GUID={F97F4E15-B787-4212-80D1-D380CBBF982E};
function OnResponseStart(Status:I4; ContentType:BSTR);
function OnResponseDataAvailable(Data:^^UI1);
function OnResponseFinished;
function OnError(ErrorNumber:I4; ErrorDescription:BSTR);
Class WinHttpRequest; // WinHttpRequest component
GUID={2087C2F4-2CEF-4953-A8AB-66779B670495};
function QueryInterface(riid:^GUID; out ppvObj:^^void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:^UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
function SetProxy(ProxySetting:HTTPREQUEST_PROXY_SETTING; [ProxyServer:variant; BypassList:variant]);
function SetCredentials(UserName:BSTR; Password:BSTR; Flags:HTTPREQUEST_SETCREDENTIALS_FLAGS);
function Open(Method:BSTR; Url:BSTR; [Async:variant]);
function SetRequestHeader(Header:BSTR; Value:BSTR);
function GetResponseHeader(Header:BSTR): BSTR;
function GetAllResponseHeaders: BSTR;
function Send([Body:variant]);
property-get Status: I4;
property-get StatusText: BSTR;
property-get ResponseText: BSTR;
property-get ResponseBody: variant;
property-get ResponseStream: variant;
property-get Option(Option:WinHttpRequestOption): variant;
property-put Option(Option:WinHttpRequestOption; variant);
function WaitForResponse([Timeout:variant]): bool;
function Abort;
function SetTimeouts(ResolveTimeout:I4; ConnectTimeout:I4; SendTimeout:I4; ReceiveTimeout:I4);
function SetClientCertificate(ClientCertificate:BSTR);
function SetAutoLogonPolicy(AutoLogonPolicy:WinHttpRequestAutoLogonPolicy);
function OnResponseStart(Status:I4; ContentType:BSTR);
function OnResponseDataAvailable(Data:^^UI1);
function OnResponseFinished;
function OnError(ErrorNumber:I4; ErrorDescription:BSTR);
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
示例:
同步获取数据
代码:
function getText(strURL)
{
var strResult;
try
{
// Create the WinHTTPRequest ActiveX Object.
var WinHttpReq = new ActiveXObject(
"WinHttp.WinHttpRequest.5.1");
// Create an HTTP request.
var temp = WinHttpReq.Open("GET", strURL, false);
// Send the HTTP request.
WinHttpReq.Send();
// Retrieve the response text.
strResult = WinHttpReq.ResponseText;
}
catch (objError)
{
strResult = objError + "\n"
strResult += "WinHTTP returned error: " +
(objError.number & 0xFFFF).toString() + "\n\n";
strResult += objError.description;
}
// Return the response text.
return strResult;
}
WScript.Echo(getText("http://www.microsoft.com/default.htm"));
------------------------------------------------------------------------------------------------------------------------------------------------------------------
改为异步获取
代码:
// Create a HTTP request.
var temp = WinHttpReq.Open("GET", strURL, true);//此处由false改成true
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
在访问ResponseText之前调用WaitForResponse方法以确保获取的是完整的响应。
代码:
// Send the HTTP request.
WinHttpReq.Send();
// Wait for the entire response.
WinHttpReq.WaitForResponse();
// Retrieve the response text.
strResult = WinHttpReq.ResponseText;
********************************************************************************************************************************************
AJAX(狭义)不用这个组件。
补充一个应用例子:显示Http连接过程
将以下代码保存为 httpConnect.wsf
代码:
var HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0;
var login = "admin";
var passw = "admin";
var targURL = "http://bbs.veryhman.com";
var method = "GET";
http.Open(method, targURL);
var Done = false;
var LastStatus=0;
do
{
http.Send();
var Status = http.Status;
switch (Status)
{
case 200:
Done = true;
break;
case 401:
p("Requires Server UserName and Password.");
http.Open(method, targURL, false);
http.SetCredentials(login, passw,
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
if (LastStatus == 401)
Done = true;
break;
default:
p("Unexpected Status: " + Status);
Done = true;
break;
}
LastStatus = Status;
} while (!Done);
p(http.GetAllResponseHeaders());
function p(s){WScript.Echo(s)}
function http::OnError(ErrorNumber, ErrorDescription) {p("ErrorNumber: "+ErrorNumber);p("ErrorDescription: "+ErrorDescription)}
function http::OnResponseDataAvailable(Data) {p(Data.join("\n"))}
function http::OnResponseFinished() {p("Response Finished.")}
function http::OnResponseStart(Status, ContentType) {p("Status: "+Status);p("ContentType: "+ContentType)}
在cmd命令行里运行
cscript httpConnect.wsf
*************************************************************************************************************************************
Use Winhttp.winhttprequest To Download Files From A Remote Web Server To A Local Mirror Site... ( Vbscript )
Author: Martin77
Description:
A script that downloads files from a remote web server to a local mirror site (you can use it for just downloading files to anywhere you want...)
Script:
'*************************************************************************************************
' Download.vbs - Download files from the internet to local mirror servers
' Created by Martin77 (version 1.0)
'*************************************************************************************************
Option Explicit
On Error Resume Next
Dim LogPath, SourceURL, TargetPath, Files2Download
'*************************************************************************************************
' Edit these variables only!
'*************************************************************************************************
'Where to save the log file:
LogPath = "C:\Inetpub\wwwroot\Logs\"
'From where download the files:
SourceURL = "http://www.somesite.com/rootfolder/otherfolder/"
'Where to save the downloaded files:
TargetPath = "C:\Inetpub\wwwroot\LocalSite\"
'What files to download (separated by ','):
Files2Download = "file1.txt,file2.exe,file3.zip"
'*************************************************************************************************
Main 'Run the main process
'*************************************************************************************************
'Main process:
Sub Main
Dim strOutputFile, strErrCode, strOutPut, i
Dim objArgs, objFSO, objOutputFile, objHTTP
Dim arrFiles2Download
Const ForReading = 1, ForWriting = 2, ForAppending = 8
arrFiles2Download = Split(Files2Download,",")
strOutputFile = LogPath & "Download-Log-" & Replace(Date,"/","-") & ".log"
'Parse Arguments (from App. Center URL Health Monitor):
Set objArgs = Wscript.Arguments
For i = 0 To objArgs.count - 1
strErrCode = strErrCode & objArgs(i) & " "
Next
Set objArgs = Nothing
strOutPut = Now & " - " & strErrCode
'Download files:
For i = 0 To Ubound(arrFiles2Download)
If SaveWebBinary(SourceURL & arrFiles2Download(i), TargetPath & arrFiles2Download(i)) Then
'Download OK:
strOutPut = strOutPut & vbCrLf & Now & " - Downloaded file: " & arrFiles2Download(i)
Else
'Download Error
strOutPut = strOutPut & vbCrLf & Now & " - Error downloading file: " & arrFiles2Download(i)
End If
Next
'Write LogFile:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.OpenTextFile(strOutputFile, ForAppending, True)
objOutputFile.Write "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" & vbCrLf
objOutputFile.Write strOutPut & vbCrLf
objOutputFile.Write "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" & vbCrLf
objOutputFile.Close
Set objFSO = Nothing
Set objOutputFile = Nothing
End Sub
'*************************************************************************************************
'Download the file from %strUrl% to %strFile% - returns True / False
Function SaveWebBinary(strUrl, strFile) 'As Boolean
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Const ForWriting = 2
Dim web, varByteArray, strData, strBuffer, lngCounter, ado
Err.Clear
Set web = Nothing
Set web = CreateObject("WinHttp.WinHttpRequest.5.1")
If web Is Nothing Then Set web = CreateObject("WinHttp.WinHttpRequest")
If web Is Nothing Then Set web = CreateObject("MSXML2.ServerXMLHTTP")
If web Is Nothing Then Set web = CreateObject("Microsoft.XMLHTTP")
web.Open "GET", strURL, False
web.Send
If Err.Number 0 Then
SaveWebBinary = False
Set web = Nothing
Exit Function
End If
If web.Status "200" Then
SaveWebBinary = False
Set web = Nothing
Exit Function
End If
varByteArray = web.ResponseBody
Set web = Nothing
'Save the file
On Error Resume Next
Set ado = Nothing
Set ado = CreateObject("ADODB.Stream")
If ado Is Nothing Then
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(strFile, ForWriting, True)
strData = ""
strBuffer = ""
For lngCounter = 0 to UBound(varByteArray)
ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
Next
ts.Close
Else
ado.Type = adTypeBinary
ado.Open
ado.Write varByteArray
ado.SaveToFile strFile, adSaveCreateOverWrite
ado.Close
End If
SaveWebBinary = True
End Function
'*************************************************************************************************
http://bbs.blueidea.com/thread-2818063-1-1.html
2009年12月14日
参考:http://msdn2.microsoft.com/en-us/library/aa384273(VS.85).aspx
WinHttp; // Microsoft WinHTTP Services, version 5.1
Alias HTTPREQUEST_PROXY_SETTING;
I4
Alias HTTPREQUEST_SETCREDENTIALS_FLAGS;
I4
Enum WinHttpRequestOption; // WinHttpRequest Options
GUID={12782009-FE90-4877-9730-E5E183669B19};
WinHttpRequestOption_UserAgentString = 0;
WinHttpRequestOption_URL = 1;
WinHttpRequestOption_URLCodePage = 2;
WinHttpRequestOption_EscapePercentInURL = 3;
WinHttpRequestOption_SslErrorIgnoreFlags = 4;
WinHttpRequestOption_SelectCertificate = 5;
WinHttpRequestOption_EnableRedirects = 6;
WinHttpRequestOption_UrlEscapeDisable = 7;
WinHttpRequestOption_UrlEscapeDisableQuery = 8;
WinHttpRequestOption_SecureProtocols = 9;
WinHttpRequestOption_EnableTracing = 10;
WinHttpRequestOption_RevertImpersonationOverSsl = 11;
WinHttpRequestOption_EnableHttpsToHttpRedirects = 12;
WinHttpRequestOption_EnablePassportAuthentication = 13;
WinHttpRequestOption_MaxAutomaticRedirects = 14;
WinHttpRequestOption_MaxResponseHeaderSize = 15;
WinHttpRequestOption_MaxResponseDrainSize = 16;
WinHttpRequestOption_EnableHttp1_1 = 17;
WinHttpRequestOption_EnableCertificateRevocationCheck = 18;
Enum WinHttpRequestAutoLogonPolicy;
GUID={9D8A6DF8-13DE-4B1F-A330-67C719D62514};
AutoLogonPolicy_Always = 0;
AutoLogonPolicy_OnlyIfBypassProxy = 1;
AutoLogonPolicy_Never = 2;
Enum WinHttpRequestSslErrorFlags;
GUID={152A1CA2-55A9-43A3-B187-0605BB886349};
SslErrorFlag_UnknownCA = $100;
SslErrorFlag_CertWrongUsage = $200;
SslErrorFlag_CertCNInvalid = $1000;
SslErrorFlag_CertDateInvalid = $2000;
SslErrorFlag_Ignore_All = $3300;
Enum WinHttpRequestSecureProtocols;
GUID={6B2C51C1-A8EA-46BD-B928-C9B76F9F14DD};
SecureProtocol_SSL2 = 8;
SecureProtocol_SSL3 = 32;
SecureProtocol_TLS1 = 128;
SecureProtocol_ALL = 168;
Dispatch IWinHttpRequest; // IWinHttpRequest Interface
GUID={016FE2EC-B2C8-45F8-B23B-39E53A75396B};
function QueryInterface(riid:^GUID; out ppvObj:^^void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:^UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
function SetProxy(ProxySetting:HTTPREQUEST_PROXY_SETTING; [ProxyServer:variant; BypassList:variant]);
function SetCredentials(UserName:BSTR; Password:BSTR; Flags:HTTPREQUEST_SETCREDENTIALS_FLAGS);
function Open(Method:BSTR; Url:BSTR; [Async:variant]);
function SetRequestHeader(Header:BSTR; Value:BSTR);
function GetResponseHeader(Header:BSTR): BSTR;
function GetAllResponseHeaders: BSTR;
function Send([Body:variant]);
property-get Status: I4;
property-get StatusText: BSTR;
property-get ResponseText: BSTR;
property-get ResponseBody: variant;
property-get ResponseStream: variant;
property-get Option(Option:WinHttpRequestOption): variant;
property-put Option(Option:WinHttpRequestOption; variant);
function WaitForResponse([Timeout:variant]): bool;
function Abort;
function SetTimeouts(ResolveTimeout:I4; ConnectTimeout:I4; SendTimeout:I4; ReceiveTimeout:I4);
function SetClientCertificate(ClientCertificate:BSTR);
function SetAutoLogonPolicy(AutoLogonPolicy:WinHttpRequestAutoLogonPolicy);
Interface IWinHttpRequestEvents; // IWinHttpRequestEvents Interface
GUID={F97F4E15-B787-4212-80D1-D380CBBF982E};
function OnResponseStart(Status:I4; ContentType:BSTR);
function OnResponseDataAvailable(Data:^^UI1);
function OnResponseFinished;
function OnError(ErrorNumber:I4; ErrorDescription:BSTR);
Class WinHttpRequest; // WinHttpRequest component
GUID={2087C2F4-2CEF-4953-A8AB-66779B670495};
function QueryInterface(riid:^GUID; out ppvObj:^^void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:^UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:^^void);
function GetIDsOfNames(riid:^GUID; rgszNames:^^I1; cNames:UINT; lcid:UI4; out rgdispid:^I4);
function Invoke(dispidMember:I4; riid:^GUID; lcid:UI4; wFlags:UI2; pdispparams:^DISPPARAMS; out pvarResult:^variant; out pexcepinfo:^EXCEPINFO; out puArgErr:^UINT);
function SetProxy(ProxySetting:HTTPREQUEST_PROXY_SETTING; [ProxyServer:variant; BypassList:variant]);
function SetCredentials(UserName:BSTR; Password:BSTR; Flags:HTTPREQUEST_SETCREDENTIALS_FLAGS);
function Open(Method:BSTR; Url:BSTR; [Async:variant]);
function SetRequestHeader(Header:BSTR; Value:BSTR);
function GetResponseHeader(Header:BSTR): BSTR;
function GetAllResponseHeaders: BSTR;
function Send([Body:variant]);
property-get Status: I4;
property-get StatusText: BSTR;
property-get ResponseText: BSTR;
property-get ResponseBody: variant;
property-get ResponseStream: variant;
property-get Option(Option:WinHttpRequestOption): variant;
property-put Option(Option:WinHttpRequestOption; variant);
function WaitForResponse([Timeout:variant]): bool;
function Abort;
function SetTimeouts(ResolveTimeout:I4; ConnectTimeout:I4; SendTimeout:I4; ReceiveTimeout:I4);
function SetClientCertificate(ClientCertificate:BSTR);
function SetAutoLogonPolicy(AutoLogonPolicy:WinHttpRequestAutoLogonPolicy);
function OnResponseStart(Status:I4; ContentType:BSTR);
function OnResponseDataAvailable(Data:^^UI1);
function OnResponseFinished;
function OnError(ErrorNumber:I4; ErrorDescription:BSTR);
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
示例:
同步获取数据
代码:
function getText(strURL)
{
var strResult;
try
{
// Create the WinHTTPRequest ActiveX Object.
var WinHttpReq = new ActiveXObject(
"WinHttp.WinHttpRequest.5.1");
// Create an HTTP request.
var temp = WinHttpReq.Open("GET", strURL, false);
// Send the HTTP request.
WinHttpReq.Send();
// Retrieve the response text.
strResult = WinHttpReq.ResponseText;
}
catch (objError)
{
strResult = objError + "\n"
strResult += "WinHTTP returned error: " +
(objError.number & 0xFFFF).toString() + "\n\n";
strResult += objError.description;
}
// Return the response text.
return strResult;
}
WScript.Echo(getText("http://www.microsoft.com/default.htm"));
------------------------------------------------------------------------------------------------------------------------------------------------------------------
改为异步获取
代码:
// Create a HTTP request.
var temp = WinHttpReq.Open("GET", strURL, true);//此处由false改成true
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
在访问ResponseText之前调用WaitForResponse方法以确保获取的是完整的响应。
代码:
// Send the HTTP request.
WinHttpReq.Send();
// Wait for the entire response.
WinHttpReq.WaitForResponse();
// Retrieve the response text.
strResult = WinHttpReq.ResponseText;
********************************************************************************************************************************************
AJAX(狭义)不用这个组件。
补充一个应用例子:显示Http连接过程
将以下代码保存为 httpConnect.wsf
代码:
var HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0;
var login = "admin";
var passw = "admin";
var targURL = "http://bbs.veryhman.com";
var method = "GET";
http.Open(method, targURL);
var Done = false;
var LastStatus=0;
do
{
http.Send();
var Status = http.Status;
switch (Status)
{
case 200:
Done = true;
break;
case 401:
p("Requires Server UserName and Password.");
http.Open(method, targURL, false);
http.SetCredentials(login, passw,
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
if (LastStatus == 401)
Done = true;
break;
default:
p("Unexpected Status: " + Status);
Done = true;
break;
}
LastStatus = Status;
} while (!Done);
p(http.GetAllResponseHeaders());
function p(s){WScript.Echo(s)}
function http::OnError(ErrorNumber, ErrorDescription) {p("ErrorNumber: "+ErrorNumber);p("ErrorDescription: "+ErrorDescription)}
function http::OnResponseDataAvailable(Data) {p(Data.join("\n"))}
function http::OnResponseFinished() {p("Response Finished.")}
function http::OnResponseStart(Status, ContentType) {p("Status: "+Status);p("ContentType: "+ContentType)}
在cmd命令行里运行
cscript httpConnect.wsf
*************************************************************************************************************************************
Use Winhttp.winhttprequest To Download Files From A Remote Web Server To A Local Mirror Site... ( Vbscript )
Author: Martin77
Description:
A script that downloads files from a remote web server to a local mirror site (you can use it for just downloading files to anywhere you want...)
Script:
'*************************************************************************************************
' Download.vbs - Download files from the internet to local mirror servers
' Created by Martin77 (version 1.0)
'*************************************************************************************************
Option Explicit
On Error Resume Next
Dim LogPath, SourceURL, TargetPath, Files2Download
'*************************************************************************************************
' Edit these variables only!
'*************************************************************************************************
'Where to save the log file:
LogPath = "C:\Inetpub\wwwroot\Logs\"
'From where download the files:
SourceURL = "http://www.somesite.com/rootfolder/otherfolder/"
'Where to save the downloaded files:
TargetPath = "C:\Inetpub\wwwroot\LocalSite\"
'What files to download (separated by ','):
Files2Download = "file1.txt,file2.exe,file3.zip"
'*************************************************************************************************
Main 'Run the main process
'*************************************************************************************************
'Main process:
Sub Main
Dim strOutputFile, strErrCode, strOutPut, i
Dim objArgs, objFSO, objOutputFile, objHTTP
Dim arrFiles2Download
Const ForReading = 1, ForWriting = 2, ForAppending = 8
arrFiles2Download = Split(Files2Download,",")
strOutputFile = LogPath & "Download-Log-" & Replace(Date,"/","-") & ".log"
'Parse Arguments (from App. Center URL Health Monitor):
Set objArgs = Wscript.Arguments
For i = 0 To objArgs.count - 1
strErrCode = strErrCode & objArgs(i) & " "
Next
Set objArgs = Nothing
strOutPut = Now & " - " & strErrCode
'Download files:
For i = 0 To Ubound(arrFiles2Download)
If SaveWebBinary(SourceURL & arrFiles2Download(i), TargetPath & arrFiles2Download(i)) Then
'Download OK:
strOutPut = strOutPut & vbCrLf & Now & " - Downloaded file: " & arrFiles2Download(i)
Else
'Download Error
strOutPut = strOutPut & vbCrLf & Now & " - Error downloading file: " & arrFiles2Download(i)
End If
Next
'Write LogFile:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.OpenTextFile(strOutputFile, ForAppending, True)
objOutputFile.Write "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" & vbCrLf
objOutputFile.Write strOutPut & vbCrLf
objOutputFile.Write "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" & vbCrLf
objOutputFile.Close
Set objFSO = Nothing
Set objOutputFile = Nothing
End Sub
'*************************************************************************************************
'Download the file from %strUrl% to %strFile% - returns True / False
Function SaveWebBinary(strUrl, strFile) 'As Boolean
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Const ForWriting = 2
Dim web, varByteArray, strData, strBuffer, lngCounter, ado
Err.Clear
Set web = Nothing
Set web = CreateObject("WinHttp.WinHttpRequest.5.1")
If web Is Nothing Then Set web = CreateObject("WinHttp.WinHttpRequest")
If web Is Nothing Then Set web = CreateObject("MSXML2.ServerXMLHTTP")
If web Is Nothing Then Set web = CreateObject("Microsoft.XMLHTTP")
web.Open "GET", strURL, False
web.Send
If Err.Number 0 Then
SaveWebBinary = False
Set web = Nothing
Exit Function
End If
If web.Status "200" Then
SaveWebBinary = False
Set web = Nothing
Exit Function
End If
varByteArray = web.ResponseBody
Set web = Nothing
'Save the file
On Error Resume Next
Set ado = Nothing
Set ado = CreateObject("ADODB.Stream")
If ado Is Nothing Then
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(strFile, ForWriting, True)
strData = ""
strBuffer = ""
For lngCounter = 0 to UBound(varByteArray)
ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1)))
Next
ts.Close
Else
ado.Type = adTypeBinary
ado.Open
ado.Write varByteArray
ado.SaveToFile strFile, adSaveCreateOverWrite
ado.Close
End If
SaveWebBinary = True
End Function
'*************************************************************************************************
http://bbs.blueidea.com/thread-2818063-1-1.html