_WinHTTP_GetRespond获取大文件的问题
用_WinHTTP_GetRespond函数获取内网的几M的Excel文件非常卡,只能用个Do until来一直循环,结果就是下载这个文件要花上十来分钟,但是直接用Firefox或者其他浏览器就马上就能下载下来,这是怎么回事啊? 人家浏览器下载是用了多线程吧(?)_WinHTTP_GetRespond就一个线程吧(?) _WinHTTP_GetRespond要是能规定返回信息量就好了 没用过,帮顶 回复 3# whitehead
示例不是有用自定义的函数接管下载的过程吗?
创建句柄后你可以自行设置该句柄的特定参数,该函数并不做相关的工作。 回复 1# qinylj
不知道你是用的什么网络,这里测试没问题。
测试用的代码:
#include <WinHttp_GetRespond.au3>
$MyOpen=_WinHttpOpen()
Local $Request=["$hRequest",@ScriptDir &"\暖色调悲伤01.flv",32] ;-----该参数与 _DownLoadByResPodn 的参数相对应
$rContext=_WinHTTP_GetRespond($MyOpen,"http://192.168.11.3/G%3A/暖色调悲伤01.flv",-1,-1,-1,-1,-1,-1,"_DownLoadByResPodn",$Request)
If Not @error Then
MsgBox(64,"Example 5 结果","下载完成!")
Else
MsgBox(48,@error,$rContext)
EndIf
_WinHttpCloseHandle($MyOpen)
Func _DownLoadByResPodn($hRequest,$SaveFile,$FileBlock)
$File=FileOpen($SaveFile,18)
Local $TotalLength =_WinHttpQueryHeaders($hRequest,$WINHTTP_QUERY_CONTENT_LENGTH) ;文件长度
Local $ri = 0, $TotalTime = TimerInit(), $StepTime = TimerInit(),$Stepri = 0
For $i = 1 To 1000000
$rDate= _WinHttpReadData($hRequest,2,1024 * $FileBlock)
If @error Then ExitLoop
FileWrite($File,$rDate)
$ri += BinaryLen($rDate)
$Stepri += BinaryLen($rDate)
If TimerDiff($StepTime) >= 998 Then
ConsoleWrite('At '& @HOUR & ':' & @MIN & ':' & @SEC & ' - 下载速度:' & $Stepri / 1024 &" KB" & ' 已完成:' & Round($ri / $TotalLength * 100,2) & '%' &@CRLF)
$StepTime = TimerInit()
$Stepri = 0
EndIf
Sleep(1)
Next
ConsoleWrite("Done .用时:" & Int(TimerDiff( $TotalTime )/1000) & ' Sec ,文件总大小:'&$TotalLength / 1024 & 'KB' &@CRLF)
FileClose($File)
_WinHttpCloseHandle($hRequest)
Return
EndFunc 回复 5# republican
谢谢republican大侠关注,我可能没说清。
我是指,比如无法指定读取1000字节的数据内容吧?有时工作中并不需要读取全部数据内容,读一小部分就够了。 回复 7# whitehead
以6楼例子来说...你判断$ri >= 1000直接Return不就行了?.................................... 回复 8# republican
谢谢republican大侠,学习还是不够认真啊 回复 6# republican
不是直接下文件哈,是一个php页面返回的数据,返回的数据是伪Excel表。 这个,期待高手解决中…,顺学习下 回复 10# qinylj
下载是广义的说法,况且获取服务器返回数据就是下载的意思,没什么不一样.... 回复 12# republican
今天仔细的排查了一下,然后又用浏览器操作了几次,确定是服务器有问题,呵呵,感谢了。 呵呵,学习了。。。
页:
[1]