我正在尝试为可以安装和卸载mod的游戏制作一个简单的启动器,并更新它们。我对VBScript一无所知,所以我从互联网上获得了大部分下载/更新代码。我已完成大部分代码,但我遇到了问题。我正在尝试从我的谷歌硬盘上下载大约1/2 GB的大型zip文件夹。当我所拥有的只是zip文件夹中的一个简单文本文件作为测试时,它正在工作,但它所做的只是下载一个损坏的zip文件夹。 WinRar无法打开它,给出错误消息“存档处于未知格式或已损坏”。所以我的问题是我使用的代码是否对文件大小有限制?我正在尝试下载https://drive.google.com/uc?export=download&id=0BxlXlAM9nwYTZTFUdXpWQlJyN2M这是我的google驱动器文件的直接下载链接。
Dim http: Set http = createobject("Microsoft.XMLHTTP")
Dim stream: Set stream = createobject("Adodb.Stream")
http.Open "GET", "https://drive.google.com/uc?export=download&id=0BxlXlAM9nwYTZTFUdXpWQlJyN2M", False
http.Send
With stream
.Type = 1
.Open
.Write http.responseBody
.SaveToFile "c:\updates\normaldata\normal.zip", 2
End With
答案 0 :(得分:1)
由于@Noodles已经指出您的原始链接被重定向到确认页面,因为该文件太大而无法扫描恶意软件。您需要从该页面中提取实际的下载链接,例如像这样:
baseUrl = "https://drive.google.com"
url = baseUrl & "/uc?export=download&id=0BxlXlAM9nwYTZTFUdXpWQlJyN2M"
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", url, False
http.Send
If http.Status <> 200 Then
WScript.Echo http.Status & " " & http.StatusText
WScript.Quit 1
ElseIf Left(http.getResponseHeader("Content-Type"), 9) = "text/html" Then
Set html = CreateObject("HTMLFile")
html.Write http.ResponseText
Set dl = html.GetElementById("uc-download-link")
http.Open "GET", Replace(dl.href, "about:", baseUrl), False
http.Send
...
End If
但是,当我尝试按照链接时,我收到了拒绝访问错误,而下载在浏览器中运行良好。要使VBScript正常工作,您可能需要检查浏览器和Web服务器之间的对话(例如,使用Fiddler),并根据结果调整第二个HTTP请求。
答案 1 :(得分:0)
首先,该链接不是直接下载。它会将您带到一个页面,警告您拉链不能被Google扫描。
你不做的是
在记事本中打开文件并查看其内容。 Zips从PK,可执行文件和带有MZ的dll开始,你会识别HTML。您正在下载1000字节以下的网页。
您没有错误检查。请注意我的代码是80%的错误检查。
#define HTTP_STATUS_OK 200 //请求已完成
它为您提供了想要给您的页面。
下载网页并将其另存为zip。将其重命名为html并在Internet Explorer中打开。
Set fso = CreateObject("Scripting.FileSystemObject")
Set Outp = Wscript.Stdout
Set wshShell = CreateObject("Wscript.Shell")
Set ShApp = CreateObject("Shell.Application")
On Error Resume Next
Set File = WScript.CreateObject("Msxml2.XMLHTTP.6.0")
File.Open "GET", "https://drive.google.com/uc?export=download&id=0BxlXlAM9nwYTZTFUdXpWQlJyN2M", False
File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)"
File.Send
If err.number <> 0 then
wscript.echo ""
wscript.echo "Error getting file"
wscript.echo "=================="
wscript.echo ""
wscript.echo "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description
wscript.echo "Source " & err.source
wscript.echo ""
wscript.echo "HTTP Error " & File.Status & " " & File.StatusText
wscript.echo File.getAllResponseHeaders
wscript.echo File.ResponseBody
else
On Error Goto 0
wscript.echo "Server Response " & File.Status & " " & File.StatusText
wscript.echo File.getAllResponseHeaders
wscript.echo File.ResponseBody
Set BS = CreateObject("ADODB.Stream")
BS.type = 1
BS.open
BS.Write File.ResponseBody
BS.SaveToFile ShApp.Namespace(&h10).self.path & "\file.zip", 2
End If