Code: Select all
Procedure.s DownloadToMemory(URL.s,maxbytes=0)
Protected ServerID.l, Header.s, *Buffer = AllocateMemory(1000), String.s, Server.s, Path.s, i.l, DataLength.l,Bytes.l
URL = RemoveString(URL,"http://",1)
i = FindString(URL,"/",1)
If i
Server = Left(URL,i-1)
Path = Right(URL,Len(URL)-i)
Else
Server = URL
EndIf
ServerID = OpenNetworkConnection(Server,80)
If ServerID
;Header for the GET request
Header = "GET /"+Path+" HTTP/1.1"+#CRLF$
Header + "Host: "+Server+#CRLF$+#CRLF$
SendNetworkData(ServerID,@Header,Len(Header)) ;Send the GET request
Repeat ;Wait for it to start sending data
Delay(2) ;No need to use 100% CPU while waiting
Until NetworkClientEvent(ServerID) = #PB_NetworkEvent_Data
Repeat ;Put all recieved data in a sring
DataLength = ReceiveNetworkData(ServerID,*Buffer,1000)
String + PeekS(*Buffer,DataLength)
Bytes + DataLength
Until DataLength = 0 or (maxbytes > 0 and bytes > maxbytes)
FreeMemory(*Buffer) ;Don't need to use this memory anymore
;Cut of the header of the recieved data
i = FindString(String,#CRLF$+#CRLF$,1)
String = Mid(String,i+4,Len(String)-i-3)
ProcedureReturn String
EndIf
EndProcedure