Download

从互联网下载文件.

Download URL, Filename 

参数

URL

类型: 字符串

要下载的文件的 URL. 例如, "https://someorg.org" 可能会获取到该组织的欢迎页面.

Filename

类型: 字符串

指定要在本地创建的文件的名称, 如果没有指定绝对路径, 则假定该文件位于 A_WorkingDir. 任何现有文件都将被新文件 覆盖.

该函数下载为一个文件, 要下载为变量, 请参阅下面的示例.

错误处理

失败时抛出异常.

备注

此函数下载到文件. 要下载到变量, 请参阅下面的示例. 其他方法, 请参阅以下论坛主题: www.autohotkey.com/forum/topic10466.html

即使远程文件不存在, 下载也可能会成功. 这是因为许多 Web 服务器发送错误页面来代替丢失的文件. 该错误页面将代替 Filename 保存.

防火墙或存在多个网络适配器可能导致此函数失败. 此外, 某些网站可能会阻止此类下载.

缓存: 默认情况下, 直接从远程服务器检索 URL(即, 不从 Internet Explorer 的缓存检索). 要允许缓存, 请在 URL 之前加 *0 后跟一个空格; 例如: "*0 https://someorg.org". 星号后的 0 可以用任何有效的 dwFlags 数字代替; 有关详情, 请在 www.microsoft.com 搜索 InternetOpenUrl.

代理: 如果在 Microsoft Internet Explorer 的设置中配置了代理服务器, 则将使用它.

还支持 FTP 和 Gopher URL. 例如:

Download "ftp://example.com/home/My File.zip", "C:\My Folder\My File.zip"  ; 匿名登录.
Download "ftp://user:pass@example.com:21/home/My File.zip", "C:\My Folder\My File.zip"  ; 以特定用户身份登录.
Download "ftp://user:pass@example.com/My Directory", "C:\Dir Listing.html"  ; 获取一个 HTML 格式的目录列表.

FileRead, FileCopy

示例

下载文本文件.

Download "https://www.autohotkey.com/download/2.0/version.txt", "C:\AutoHotkey Latest Version.txt"

下载 zip 文件.

Download "https://someorg.org/archive.zip", "C:\SomeOrg's Archive.zip"

下载文本到变量.

whr := ComObject("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", "http://autohotkey.com/download/2.0/version.txt", true)
whr.Send()
; 使用 'true'(上面) 和调用下面的函数, 允许脚本保持响应.
whr.WaitForResponse()
version := whr.ResponseText
MsgBox version

发出异步 HTTP 请求.

req := ComObject("Msxml2.XMLHTTP")
; 打开启用异步的请求.
req.open("GET", "https://www.autohotkey.com/download/2.0/version.txt", true)
; 设置回调函数.
req.onreadystatechange := Ready
; 发送请求. Ready() 将在其完成后被调用.
req.send()
/*
; 如果你要一直等待到下载完毕, 就不需要 onreadystatechange 了.
; 设置 async=true 和像这样等待, 可以在下载过程中允许脚本保留响应
; 而 async=false 将使脚本无响应.
while req.readyState != 4
    sleep 100
*/
Persistent

Ready() {
    if (req.readyState != 4)  ; 没有完成.
        return
    if (req.status == 200) ; OK.
        MsgBox "Latest AutoHotkey version: " req.responseText
    else
        MsgBox "Status " req.status,, 16
    ExitApp
}