Code: Alles auswählen
Procedure.l HTTPRequest(URL.s, *EndSize.LONG, PacketSize)
If Left(URL, 7) = "http://" : URL = Right(URL, Len(URL)-7) : EndIf
s = FindString(URL, "/", 1)
Host.s = "" : File.s = ""
If s <> 0 : Host.s = Left(URL, s-1) : File.s = Right(URL, Len(URL)-s) : Else : Host = URL : EndIf
ConnectionID = OpenNetworkConnection(Host, 80)
If ConnectionID
Data_.s = "GET /"+File+" HTTP/1.0"+#CRLF$
Data_.s + "Host: "+Host+#CRLF$
Data_.s + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"+#CRLF$
Data_.s + "Connection: close"+#CRLF$+#CRLF$
Text.s = ""
SendNetworkString(ConnectionID, Data_)
While NetworkClientEvent(ConnectionID) <> 2 : Delay(10) : Wend
*Buffer = AllocateMemory(PacketSize)
Size = ReceiveNetworkData(ConnectionID, *Buffer, PacketSize)
Text.s = PeekS(*Buffer, Size)
s = FindString(Text, "Content-Length:", 1)
If s <> 0
;Cut the Header
Length = Val(Trim(StringField(Mid(Text, s, FindString(Text, #CR$, s+5)), 2, ":")))-1
;Read the data
s = FindString(Text, #CRLF$+#CRLF$, 1)+3
Size = (PacketSize-s)
*Result = AllocateMemory(Length)
CopyMemory(*Buffer+s, *Result, Size)
If Size < Length
CurSize = ReceiveNetworkData(ConnectionID, *Buffer, PacketSize)
While Size < Length
If CurSize > 0
oSize = Size
Size + CurSize
CopyMemory(*Buffer, *Result+oSize, CurSize)
EndIf
CurSize = ReceiveNetworkData(ConnectionID, *Buffer, PacketSize)
Wend
EndIf
EndIf
If *Buffer
FreeMemory(*Buffer)
EndIf
CloseNetworkConnection(ConnectionID)
*EndSize\l = Size
ProcedureReturn *Result
EndIf
EndProcedure
Procedure DownloadToFile(URL.s, Filename.s)
File = CreateFile(#PB_Any, Filename)
If File
*Buffer = HTTPRequest(URL.s, @Size, 256)
If *Buffer
WriteData(*Buffer, Size)
CloseFile(File)
FreeMemory(*Buffer)
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Noch etwas umändern und man kann auch Daten senden.