Найдите размер извлеченных двоичных данных с помощью WinHttp.WinHttpRequest.

Недавно я понял, что URLDownloadToFile использует настройку прокси-сервера IE. Поэтому я ищу альтернативу и обнаружил, что WinHttp.WinHttpRequest может работать.

Кажется, свойство ResponseBody содержит извлеченные данные, и мне нужно записать их в файл. Проблема в том, что я не могу найти его размер в байтах.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384106%28v=vs.85%29.aspx содержит информацию об объекте, но я не нашел для него соответствующих свойств.

Может кто-нибудь сказать, как?

strURL := "http://www.mozilla.org/media/img/sandstone/buttons/firefox-large.png"
strFilePath := A_ScriptDir "\dl.jpg"

pwhr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
pwhr.Open("GET", strURL) 
pwhr.Send() 

if (psfa := pwhr.ResponseBody ) {   
    oFile := FileOpen(strFilePath, "w")
    ; msgbox % ComObjType(psfa) ; 8209 
    oFile.RawWrite(psfa, strLen(psfa)) ; not working
    oFile.Close()   
}

person NbdNnm    schedule 23.11.2012    source источник


Ответы (1)


Я нашел способ сам.

Поскольку psfa представляет собой массив байтов, просто количество элементов представляет его размер.

msgbox % psfa.maxindex() + 1    ; 17223 bytes for the example file. A COM array is zero-based so it needs to add one.

Однако сохранить двоичные данные, хранящиеся в безопасном массиве, с помощью файлового объекта не удалось. (Может быть способ, но я не мог его найти) Вместо этого ADODB.Stream работал как шарм.

strURL := "http://www.mozilla.org/media/img/sandstone/buttons/firefox-large.png"
strFilePath := A_ScriptDir "\dl.png"
bOverWrite := true

pwhr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
pwhr.Open("GET", strURL) 
pwhr.Send() 

if (psfa := pwhr.ResponseBody ) {   
    pstm := ComObjCreate("ADODB.Stream")
    pstm.Type() := 1        ; 1: binary 2: text
    pstm.Open()
    pstm.Write(psfa)
    pstm.SaveToFile(strFilePath, bOverWrite ? 2 : 1)
    pstm.Close()    
}
person NbdNnm    schedule 24.11.2012