2015-04-05 95 views
4

UrlDownloadToFile在AutoHotkey中是一个很好的命令,在大多数情况下工作得很好,但有时下载机制对于它来说太复杂了。例如,如果下载需要设置特定的用户代理,或者下载需要cookie或甚至密码。UrlDownloadToFile的替代

所以问题是:
是否有更高级的下载功能,可以处理上述所有的说法?

+0

我认为你最近的帖子是非常有用的。请将它们发布在ahkscript.org – vasili111 2015-04-05 19:24:30

+0

谢谢。 :)你可以在那里找到大部分。他们往往很难找到,因为不是所有人都有专用线程,其中一些在autohotkey.com上,有些在ahkscript.org上。我将它们以“Bruttosozialprodukt”的名义发布。例如:http://www.autohotkey.com/board/topic/101007-super-simple-download-with-progress-bar/#post_id_632780 – Forivin 2015-04-05 19:31:31

+0

不久将会有autohotkey.com和ahkscript.org的合并。目前的autohotkey.com论坛将成为只读,而在ahkscript.org的论坛将转到autohotkey.com并且处于活动状态。你真的有很多好的和有用的脚本,并使它们易于搜索。我认为最好在ahkscript.org为每个脚本分别创建一个线程。 – vasili111 2015-04-06 07:20:51

回答

3

我这个前一段时间写的,并认为这将是一个不错的主意,把它包起来的函数,它张贴在这里:

Download(UrlToFile,SaveFileAs:="",Overwrite:=True,headers:="",method:="GET",postData:="") { 
    WinHttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1") 
    WinHttpObj.Open(method, UrlToFile) 
    For header, value in headers 
     WinHttpObj.SetRequestHeader(header, value) 
    WinHttpObj.Send(postData) 

    ADODBObj := ComObjCreate("ADODB.Stream") 
    ADODBObj.Type := 1 
    ADODBObj.Open() 
    ADODBObj.Write(WinHttpObj.ResponseBody) 
    If !SaveFileAs { 
     urlSplitArray := StrSplit(UrlToFile, "/") 
     SaveFileAs := urlSplitArray[urlSplitArray.MaxIndex()] 
    }   
    ADODBObj.SaveToFile(SaveFileAs, Overwrite ? 2:1) 
    ADODBObj.Close() 
} 

例1

Download("http://ahkscript.org/download/1.1/AutoHotkey111402_Install.exe") 

示例2

customHeaders := {"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0" 
       ,"Cache-Control": "max-age=0" 
       ,"Cookie": "downloadtoken=b82416fdb23e421fb5a"} 
Download("http://download.piriform.com/ccsetup410.exe","",True,customHeaders) 

例3

Download("http://foo.bar/example.exe","example.exe",True,{"Cookie":"sessionid=abc123"},"POST","username=foo_bar&password=qwerty") 
+0

非常感谢您的努力。您对ahk网络的贡献非常受欢迎:) – Blauhirn 2015-04-06 10:41:48