UrlDownloadToVar()函数-下载到变量
分享一段从AHK中文论坛淘来的下载函数:UrlDownloadToVar():
UrlDownloadToVar(URL,Timeout=-1) ;使用内置的UrlDownloadToFile命令,在多线程情况下,很容易出现线程退出了,文件却没正常下载的情况。在单进程情况下,很容易卡死在“牛杂网”上。速度亦远慢于此函数 { ComObjError(0) WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1") WebRequest.Open("GET", URL, true) ;true为异步获取,默认是false,卡顿的根源! WebRequest.Send() WebRequest.WaitForResponse(Timeout) ;修改为异步获取后,平均获取网页速度大幅加快,故不再采用超时(Timeout=-1)。在访问ResponseText之前调用WaitForResponse方法以确保获取的是完整的响应 Return WebRequest.ResponseText() , ComObjError(0) }
函数特点(作者自述):
此函数与内置命令UrlDownloadToFile的区别有以下几点
1.直接下载到变量,没有临时文件
2.下载速度快过内置命令,大概快了100%
3.支持TIMEOUT,N秒没有下载完成可以直接返回,不必死等
4.内置命令执行时,整个AHK程序都是卡顿状态,此函数不会
5.内置命令下载一些诡异网站时,会概率性让进程或线程卡死,不是假死,是真的死掉。此函数不会
论坛地址:http://ahk8.com/Thread-UrlDownloadToVar-%E4%B8%8B%E8%BD%BD%E5%88%B0%E5%8F%98%E9%87%8F-%E4%B8%8D%E4%BC%9A%E5%8D%A1-%E4%B8%8D%E4%BC%9A%E6%AD%BB-%E6%94%AF%E6%8C%81%E8%B6%85%E6%97%B6-%E9%80%9F%E5%BA%A6%E5%BF%AB