2015-04-05 96 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