2

最近、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()   
}
4

1 に答える 1

2

私は自分で道を見つけました。

はバイト配列であるためpsfa、要素の数は単にそのサイズを表します。

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

ただし、safearrayに格納されているバイナリデータを保存するには、ファイルオブジェクトの使用は成功しませんでした。(方法はあるかもしれませんが、私はそれを見つけることができませんでした)代わりに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()    
}
于 2012-11-24T11:26:45.057 に答える