HTTP-Stream
Übersicht

![]() |
GeeeckoBetreff: HTTP-Stream |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe ich mir letztens zusammen geschustert, als ich POST-Daten übertragen musste.
Code: [AUSKLAPPEN] SuperStrict rem Local http:THTTPStream = THTTPStream.Create() http.setMethod("GET") http.setHost("www.google.de") http.setSite("index.html") http.setTimeout(1000) http.connect() Print http.sourceText() end rem Type TEStream Field socket:TSocket ' Öffnet eine TCP-Verbindung zu einem Server Function openTCPStream:TEStream(ip:Long, port:Int) Local stream:TEStream = New TEStream stream.socket = CreateTCPSocket() If(Not BindSocket(stream.socket, port)) Then RuntimeError("Can't bind Socket!") If(Not ConnectSocket(stream.socket, ip, port)) Then RuntimeError("Can't conneckt!") If(Not stream.socket.Connected()) Then RuntimeError("Not connected!") Return stream End Function ' Sendet eine Zeile Method WriteLine(msg:String) MSG:+"~n" Self.socket.send(MSG.ToCString(), Len(MSG)) End Method ' Vorhandene Daten Method availData:Int() Return Self.socket.ReadAvail() End Method ' Ließt einen Byte Method ReadByte:Byte() If(Self.socket.ReadAvail() <> 0) Then Local buf:Byte[] = New Byte[1] Self.socket.Recv(buf, 1) Return buf[0] Else RuntimeError("Nothing to read!") End If End Method ' Ließt eine Zeile Method ReadLine:String() Local MSG:String = "" Repeat Local b:Byte = Self.ReadByte() MSG:+Chr(b) If(Asc(Mid(MSG, Len(MSG), 1)) = 10 And Asc(Mid(MSG, Len(MSG) - 1, 1)) = 13) Then Return Mid(MSG, 1, Len(MSG) - 2) Forever End Method End Type Type THTTPStream Field stream:TEStream Field timeout:Int Field map:TMap Field data:TBank Field host:String Field site:String Field _method:String Field content:String ' Erstellt eine Vorbereitung zur Herstellung der Verbindung Function Create:THTTPStream() Local stream:THTTPStream = New THTTPStream Return stream End Function ' Ließt die Daten etc. aus Method connect:Int() Self.stream = TEStream.openTCPStream(HostIp(Self.host), 80) Self.stream.WriteLine(Self._method + " /" + Self.site + " HTTP/1.1") Self.stream.WriteLine("Host: " + Self.host) Self.stream.WriteLine("Content-Type: application/x-www-form-urlencoded") Self.stream.WriteLine("Content-Length: " + Len(Self.content)) Self.stream.WriteLine("") Self.stream.WriteLine(Self.content) Local start:Int = MilliSecs() While(True) If(MilliSecs() - start >= Self.timeout) Then Return False If(Self.stream.availData() <> 0) Then Exit Wend Self.map = CreateMap() Repeat Local Line:String = Self.stream.ReadLine() If(Line = "") Then Exit Self.map.Insert(Lower(Mid(Line, 1, Instr(Line, ":") - 1)), Mid(Line, Instr(Line, ":") + 2)) Print Line Forever Self.data = CreateBank(Self.stream.availData()) For Local i:Int = 0 To Self.stream.availData() - 1 Self.data.PokeByte(i, Self.stream.ReadByte()) Next End Method ' liefert den quelltext zurück Method sourceText:String() Local Text:String = "" For Local i:Int = 0 To Self.data.Capacity() - 1 Text:+Chr(Self.data.PeekByte(i)) Next Return Text End Method ' liefert ein wert für einen schlüssel Method getValue:String(key:String) Return String(Self.map.ValueForKey(Lower(key))) End Method ' ist ein Eintrag vorhanden? Method keyIsAvaible:Int(key:String) Return Self.map.Contains(Lower(key)) End Method ' setzt den "Inhalts-String" Method setContent(content:String) Self.content = content EndMethod ' setzt die methode Method setMethod(_method:String) Self._method = _method End Method ' setzt das timeout Method setTimeout(timeout:Int) Self.timeout = timeout End Method ' setzt den host Method setHost(host:String) Self.host = host End Method ' Setzt die Seite Method setSite(site:String) Self.site = site End Method End Type Das Beispiel oben sollte eigentlich reichen. Wer Post daten übertragen will, ändert die methode auf "POST" und übergibt der funktion THTTPStream-Objekt.setContent die Daten die gesendet werden sollen. Es funktionieren nur strings. Mit .getValue können Informationen aus dem Header ausgelesen werden, welchen der Server gesendet hat. lg MD Ps.: Sry für die blöde Anleitung, aber habe keine Lust eine zu schreiben, da ich es eig. nicht posten wollte ![]() |
||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
Irgendwas stimmt mit deinem Buffer nicht. Die Daten kommen nicht vollständig an.
Hatte auch noch ein Bind Problem, obwohl keines bestand... Aber habe hier was gutes gefunden: http://www.blitzbasic.com/code...?code=2208 |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe ich auch eben gemerkt...
Ist aber schon in Arbeit. Ist auch schon fast behoben ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group