UrlDownloadToFile

AutoHotKey

UrlDownloadToFile

从互联网下载文件.

UrlDownloadToFile, URL, Filename

参数

URL

要下载的文件的 URL. 例如, http://someorg.org 也许会获取那个组织的欢迎页面.

Filename

下载到文件: 指定要在本地创建的文件名, 如果未指定绝对路径则假定在 %A_WorkingDir%. 任何现有的文件会被新文件 覆盖.

下载到变量:请参阅后面的示例.

ErrorLevel

[v1.1.04+] 此命令失败时会抛出异常. 想了解更多信息, 请参阅 运行时错误.

如果遇到问题则 ErrorLevel 被置为 1, 否则为 0.

备注

甚至在远程文件不存在时, 下载也可能显示成功. 这是因为许多网络服务器会发送错误页面代替缺失的文件. 这个错误页面会代替 Filename 被保存起来.

必须安装 Internet Explorer 3 或更高版本, 此功能才有效. 防火墙或存在多个网络适配器可能导致此功能失败. 此外, 一些网站可能拦截这样的下载.

缓存:

  • 在 v1.0.44.07+, 直接从远程服务器中获取 URL 表示的文件 (即决不从 Internet Explorer 的缓存中获取). 要允许使用缓存,请在 URL 前加上 *0 和空格;例如:*0 http://someorg.org.在星号后面的零可以替换为任何有效的 dwFlags 数字; 要了解详情, 请在 www.microsoft.com 中搜索 InternetOpenUrl.
  • 在比 1.0.44.07 早的版本中, 每当可能时都会从缓存中获取文件. 要避免这种情况, 请在 URL 的末尾指定查询字符串. 例如:http://www.someorg.org/doc.html?fakeParam=42.注:如果您频繁的下载同一个文件,那么查询字符串应该进行改变.

代理: 如果在微软的 Internet Explorer 设置中配置了代理服务器, 那么 UrlDownloadToFile 会使用它访问 Internet.

FTP 和 Gopher: v1.0.48.04+ 支持 FTP 和 Gopher URL. 例如:

UrlDownloadToFile, ftp://example.com/home/My File.zip, C:\My Folder\My File.zip  ; 匿名登录.
UrlDownloadToFile, ftp://user:[email protected]:21/home/My File.zip, C:\My Folder\My File.zip  ; 以指定的用户登录.
UrlDownloadToFile, ftp://user:[email protected]/My Directory, C:\Dir Listing.html  ; 获取 HTML 格式的目录列表.

相关

FileRead, FileCopy

示例

UrlDownloadToFile, https://autohotkey.com/download/1.1/version.txt, C:\AutoHotkey Latest Version.txt
UrlDownloadToFile, http://someorg.org/archive.zip, C:\SomeOrg's Archive.zip
; 示例:下载文本到变量:
whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", "https://autohotkey.com/download/1.1/version.txt", true)
whr.Send()
; Using 'true' above and the call below allows the script to remain responsive.
whr.WaitForResponse()
version := whr.ResponseText
MsgBox % version
; Example: Make an asynchronous HTTP request.

req := ComObjCreate("Msxml2.XMLHTTP")
; Open a request with async enabled.
req.open("GET", "https://autohotkey.com/download/1.1/version.txt", true)
; Set our callback function (v1.1.17+).
req.onreadystatechange := Func("Ready")
; Send the request.  Ready() will be called when it's complete.
req.send()
/*
; If you're going to wait, there's no need for onreadystatechange.
; Setting async=true and waiting like this allows the script to remain
; responsive while the download is taking place, whereas async=false
; will make the script unresponsive.
while req.readyState != 4
    sleep 100
*/
#Persistent

Ready() {
    global req
    if (req.readyState != 4)  ; Not done yet.
        return
    if (req.status == 200) ; OK.
        MsgBox % "Latest AutoHotkey version: " req.responseText
    else
        MsgBox 16,, % "Status " req.status
    ExitApp
}