View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Randy Harmelink Randy  Harmelink is offline
external usenet poster
 
Posts: 122
Default Using msxml2.xmlhttp to automate downloads

Hmmm. For one thing, the XMLHTTP method is asynchronous when using
"False" as the third parameter, so there should be no reason to check
the ReadyState value. For example, here's a version of a subroutine I
use:

Public Function GetURLData(pURL As String) As String
On Error GoTo ErrorExit
Dim oHTTP As New XMLHTTP
oHTTP.Open "GET", pURL, False
oHTTP.Send
If oHTTP.Status = "200" Then GetURLData = oHTTP.responseText Else
GoTo ErrorExit
Exit Function
ErrorExit:
GetURLData = "Error"
End Function

I just tried it on a file that is larger than 135KB and had no problem
-- I got the full 279KB. Have you checked the length of the returned
data, or are you just getting 135KB in the output file? That is, are
you sure it's XMLHTTP that is the problem?

================ wrote:

I have been trying to use the following function based on
msxml2.xmlhttp "get" to automate file downloads from web pages. I
didn't write the code, I copied it from a web page somewhere (sorry, I
don't remember where). The problem is, it doesn't work for large
files. If I attempt to download a largish file, say 5 MB, I only get
about 135 KB.

Any suggestions?

My environment: Microsoft Windows XP Professional 5.1.2600 SP 2,
Excel 2003 SP 2, Internet Explorer 6.0 SP 2.

----- code follows -----

Function SaveWebFile(ByVal vWebFile As String, ByVal vLocalFile As
String) As Boolean
Dim oXMLHTTP As Object, i As Long, vFF As Long, oResp() As Byte

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.Open "GET", vWebFile, False 'Open socket to get the
website
oXMLHTTP.Send 'send request

'Wait for request to finish
Do While oXMLHTTP.readyState < 4
DoEvents
Loop

oResp = oXMLHTTP.responseBody 'Returns the results as a byte array

'Create local file and save results to it
vFF = FreeFile
If Dir(vLocalFile) < "" Then Kill vLocalFile
Open vLocalFile For Binary As #vFF
Put #vFF, , oResp
Close #vFF

'Clear memory
Set oXMLHTTP = Nothing
End Function

----- end code -----

Thanks in advance,
John Warren