Meet more of the family...
Returns the HTTP header.
Download a file with a progress bar (not really useful for anything, more of an example).
Returns the HTTP header.
Print HTTPHeader("http://www.google.co.uk/intl/en_uk/images/logo.gif") End Function HTTPHeader$(url$, dropError=False) url$ = url$.Replace("http://", "") Local slashPos = url$.Find("/"), host$, file$, header$ If slashPos <> -1 host$ = url$[..slashPos] file$ = url$[slashPos..] Else Return EndIf Local stream:TStream = OpenStream("tcp::" + host$) If Not stream Then Return -1 stream.WriteLine "HEAD " + file$ + " HTTP/1.1" stream.WriteLine "Host: " + host$ stream.WriteLine "Connection: close" stream.WriteLine "" Local in$ = stream.ReadLine() If dropError And (in$.Find("200") < 0) stream.Close() Return EndIf While in$ header$ :+ in$ + "~r~n" in$ = stream.ReadLine() Wend stream.Close() Return header$ End Function
Download a file with a progress bar (not really useful for anything, more of an example).
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