Sorry Grisu, I missed this earlier.
As Azathoth has said, you can do this with a TCP stream. I'm a bit tied up at the moment, but I'll post an example tomorrow.
[edit]
Okay, I sorted things quicker than expected.
It's not pretty, but it should give you the general idea.
Strict
Print HTTPGetFile("http://www.google.co.uk/intl/en_uk/images/logo.gif", "c:\google logo.gif")
End
Function HTTPGetFile(url$, filePath$)
url$ = url$.Replace("http://", "")
Local slashPos = url$.Find("/"), host$, file$
If slashPos <> -1
host$ = url$[..slashPos]
file$ = url$[slashPos..]
Else
Return -1
EndIf
Local fileStream:TStream = OpenStream(filePath$, False, True)
If Not(fileStream) Then Return -1
Local TCPStream:TStream = OpenStream("tcp::" + host$)
If Not(TCPStream)
fileStream.Close()
Return -1
EndIf
TCPStream.WriteLine "GET " + file$ + " HTTP/1.1"
TCPStream.WriteLine "Host: " + host$
TCPStream.WriteLine "Connection: close"
TCPStream.WriteLine ""
Local dataLength
Local in$ = TCPStream.ReadLine()
If in$.Find("200") < 0
TCPStream.Close()
fileStream.Close()
Return -1
EndIf
While in$
If in$.Find("Content-Length:") <> -1
dataLength = Int(in$[in$.Find(":") + 1..].Trim())
EndIf
in$ = TCPStream.ReadLine()
Wend
Local byteCount
While Not(TCPStream.Eof())
'You'd probaly want to download more than a single byte at a time here
fileStream.WriteByte(TCPStream.ReadByte())
'You'd normaly update a progress bar here...
Print "Done " + ((byteCount / Float(dataLength - 1)) * 100) + "%"
'add number of bytes downloaded
byteCount :+ 1
Wend
TCPStream.Close()
fileStream.Close()
If byteCount <> dataLength Then Return -1
End Function[/edit]