' ################################################################################
' ##
' ##  Licensed to the Apache Software Foundation (ASF) under one or more
' ##  contributor license agreements.  See the NOTICE file distributed with
' ##  this work for additional information regarding copyright ownership.
' ##  The ASF licenses this file to You under the Apache License, Version 2.0
' ##  (the "License"); you may not use this file except in compliance with
' ##  the License.  You may obtain a copy of the License at
' ##
' ##      http://www.apache.org/licenses/LICENSE-2.0
' ##
' ##  Unless required by applicable law or agreed to in writing, software
' ##  distributed under the License is distributed on an "AS IS" BASIS,
' ##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' ##  See the License for the specific language governing permissions and
' ##  limitations under the License.
' ##
' ################################################################################

set args = Wscript.Arguments

downloadUrl = args.Item(0)
savePath = args.Item(1)

dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", downloadUrl, False
xHttp.Send

with bStrm
    .type = 1 '//binary
    .open
    .write xHttp.responseBody
    .savetofile savePath, 2 '//overwrite
end with