Introduction


The example VBS script below shows how to download and save a file from a remote webserver using Microsoft VBS scripting. It can handle http/https and user authentication, using the MSXML2.XMLHTTP.3.0 method. The method could also handle client cert authentication, if necessary.

Due to the widespread use of self-signed, untrusted certificates for enabling https, it might be necessary to explicitly disable the verification. an example line has been included below, and more information can be found here (Microsoft Dev Center - Desktop, XML DOM Methods, set- and getOption).

'======================================================================
' http-download.vbs 1.0 @2011 by Frank4dd http://www.frank4dd.com/howto
' This script demonstrates a file download from a webserver using http(s).
' It can easily be extended for using basic web authentication.
'
' This program comes with ABSOLUTELY NO WARRANTY. You may redistribute
' copies of it under the terms of the GNU General Public License.
'======================================================================

'======================================================================
' Global Constants and Variables
'======================================================================
Const scriptVer  = "1.0"
Const DownloadDest = "http://www.frank4dd.com/images/frank4dd-logo.gif"
Const LocalFile = "C:\tmp.gif"
'Const webUser = "username"
'Const webPass = "password"
Const DownloadType = "binary"
dim strURL

function getit()
  dim xmlhttp

  set xmlhttp=createobject("MSXML2.XMLHTTP.3.0")
  'xmlhttp.SetOption(2, 13056) 'If url https -> Ignore all SSL errors
  strURL = DownloadDest
  msgbox "Download-URL: " & strURL

  'For basic auth, use the line below together with user+pass variables above
  'xmlhttp.Open "GET", strURL, false, webUser, webPass
  xmlhttp.Open "GET", strURL, false

  xmlhttp.Send
  Wscript.Echo "Download-Status: " & xmlhttp.Status & " " & xmlhttp.statusText
  
  If xmlhttp.Status = 200 Then
    Dim objStream
    set objStream = CreateObject("ADODB.Stream")
    objStream.Type = 1 'adTypeBinary
    objStream.Open
    objStream.Write xmlhttp.responseBody
    objStream.SaveToFile LocalFile
    objStream.Close
    set objStream = Nothing
  End If


  set xmlhttp=Nothing
End function 

'=======================================================================
' End Function Defs, Start Main
'=======================================================================
' Get cmdline params and initialize variables
If Wscript.Arguments.Named.Exists("h") Then
  Wscript.Echo "Usage: http-download.vbs"
  Wscript.Echo "version " & scriptVer
  WScript.Quit(intOK)
End If

getit()
Wscript.Echo "Download Complete. See " & LocalFile & " for success."
Wscript.Quit(intOK)
'=======================================================================
' End Main
'=======================================================================

Example Run Screenshots


example screenshot 1 for http-download.vbs

example screenshot 2 for http-download.vbs

example screenshot 3 for http-download.vbs

example screenshot 4 for http-download.vbs

MSXML2.XMLHTTP.3.0 Options Reference


A limited set of options helps to control the handling of HTTP(S) requests:

-1 (SXH_OPTION_URL)
Usage: Identify last URL, i.e. after redirects Value: String that contains the final, last used URL
Example: lastUrl = xmlhttp.getOption(-1)

0 (SXH_OPTION_URL_CODEPAGE)
Usage: Overide standard UTF-8 codepage Value: Integer of the new codepage

1 (SXH_OPTION_ESCAPE_PERCENT_IN_URL)
Usage: Enable escape for % character Value: Boolean true/false

2 (SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS)
Usage: Disable SSL trust verification. Values:

3 (SXH_OPTION_SELECT_CLIENT_SSL_CERT)
Usage: Set client certificate name (local certstore) Value: Name string

Source:

See Also: