Seite 1 von 1
Abschneiden HTML Header
Verfasst: 09.05.2012 08:54
von kunstlust
Ich würde gerne eine einfache Lösung finden um die Headerdaten von verschieden Seiten ab "<!DOCTYPE " oder "<html>" wegzuschneiden. Das Problem ist das die Daten wohl vom "ReceiveNetworkData" nicht Zeilenweise ankommen und so meine Idee den String mit Count zu prüfen nicht geht.
Könnt ihr mir einen Tip geben, wie es logisch anzugehen ist? Danke
Code: Alles auswählen
InitNetwork()
id = OpenNetworkConnection("de.selfhtml.org", 80)
SendNetworkString(id, "GET /html/kopfdaten/titel.htm HTTP/1.1" + Chr(10) + "Host: de.selfhtml.org" + Chr(10) +Chr(10) )
Repeat
If NetworkClientEvent(id) = 2
a$ = Space(2048)
ReceiveNetworkData(id, @a$, 2048)
EndIf
If CountString(a$, "<") = 1 ; geht nur mit > 1 und das ist wohl der Gedankenfehler...
out$ + a$
EndIf
Until FindString(out$, "</html>", 0)
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,10,10,480,230,0)
SetGadgetText(1,out$)
SendMessage_(GadgetID(1),#EM_SETSEL,0,-1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Abschneiden HTML Header
Verfasst: 09.05.2012 09:31
von shadow
Hi,
also der HTML-Header endet nach RFC mit zwei Zeilenschaltungen. Weiß aber grad nicht, ob es nur CR oder CRLF ist. So müsstest du einfach alles nach den ersten zwei Zeilenschaltungen als content ansehen.
<!DOCTYPE
hört sich für mich nach XML an. Oder wird das mittlerweile direkt im HTML-Code verwendet?
Edit: Dummes Mensch

Jetzt weiß ich wieder was das war ...
Re: Abschneiden HTML Header
Verfasst: 09.05.2012 11:03
von kunstlust
Ich habe mal nachgeschaut die Leerzeile ist CR+LF, leider filter er den Header noch nicht aus:
Code: Alles auswählen
InitNetwork()
id = OpenNetworkConnection("de.selfhtml.org", 80)
SendNetworkString(id, "GET /html/kopfdaten/titel.htm HTTP/1.1" + Chr(10) + "Host: de.selfhtml.org" + Chr(10) +Chr(10) )
Repeat
If NetworkClientEvent(id) = 2
a$ = Space(2048)
ReceiveNetworkData(id, @a$, 2048)
EndIf
If FindString(a$, Chr(13)+Chr(10),0) > 0
out$ + a$
EndIf
Until FindString(out$, "</html>", 0)
If OpenWindow(0,0,0,500,250,"GET Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,10,10,480,230,0)
SetGadgetText(1,out$)
SendMessage_(GadgetID(1),#EM_SETSEL,0,-1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Dazu habe ich noch eine weitere Frage, welche DatenPufferLänge ist für die GET Anweisung die Richtige? Es geht mir dabei nicht um diese HTML Seite, sonder das Grundprinzip um den Header sauber zu trennen.
Ich danke shadow für seine Hilfe, aber ich würde mich um weitere Tips freuen.
Re: Abschneiden HTML Header
Verfasst: 09.05.2012 12:12
von Bisonte
Was haltest Du von simplem Stringsuchen ?
Code: Alles auswählen
InitNetwork()
id = OpenNetworkConnection("de.selfhtml.org", 80)
If id
SendNetworkString(id, "GET /html/kopfdaten/titel.htm HTTP/1.1" + Chr(10) + "Host: de.selfhtml.org" +#CRLF$ + #CRLF$ )
Found = 0
Repeat
If NetworkClientEvent(id) = 2
a$ = Space(2048)
ReceiveNetworkData(id, @a$, 2048)
EndIf
If FindString(LCase(a$), "<html>", 0) > 0
Found = 1
EndIf
If Found = 1
If Left(LCase(a$),9) = "<!doctype"
out$ + Mid(a$,FindString(LCase(a$), "<html>", 0))
Else
out$ + a$
EndIf
EndIf
Until FindString(out$, "</html>", 0)
CloseNetworkConnection(id)
EndIf
If OpenWindow(0,0,0,500,250,"GET Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,10,10,480,230,0)
SetGadgetText(1,out$)
SendMessage_(GadgetID(1),#EM_SETSEL,0,-1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Abschneiden HTML Header
Verfasst: 09.05.2012 13:29
von kunstlust
Leider ist das noch nicht ganz die Lösung Bisonte. Ich will eine Datei herunterladen und dies noch Beeinflussungen, welcher Browser und so, was ja per get geht. Ich habe das mal vereinfach:
Code: Alles auswählen
InitNetwork()
id = OpenNetworkConnection("www.purebasic.com", 80)
SendNetworkString(id, "GET /images/box.png HTTP/1.1" + Chr(13) +Chr(10) + "Host: www.purebasic.com" + Chr(13) +Chr(10)+ Chr(13) +Chr(10) )
Repeat
If NetworkClientEvent(id) = 2
ReceiveNetworkFile(ID, "t:\box.png")
size = FileSize("t:\box.png")
Delay(500)
EndIf
Until size = FileSize("t:\box.png")
CloseNetworkConnection(id)
Die viele CR/LF habe ich mir von der
http://en.wikipedia.org/wiki/Hypertext_ ... r_Protocol geholt:
Leider ist ja PNG nicht zu gebrauchen, aber warum?
Re: Abschneiden HTML Header
Verfasst: 09.05.2012 14:50
von kunstlust
Ist ja auch klar, das die PNG "defekt" ist, weil der Header auch hier drin ist...
OK
Date: Wed, 09 May 2012 12:44:27 GMT
Server: Apache/2.2.16 (Debian)
Last-Modified: Tue, 29 Dec 2009 23:44:09 GMT
ETag: "342457-2e6d-47be69926e440"
Accept-Ranges: bytes
Content-Length: 11885
Content-Type: image/png
‰PNG
Ist der Header egal was ich herunterlade immer 10 Zeilen lang?
Re: Abschneiden HTML Header
Verfasst: 09.05.2012 14:51
von Bisonte
Schau dir mal
http://purebasic.fr/german/viewtopic.ph ... vehttpfile an....
Dort hat unser CodeCommander

etwas gebastelt wo du dir evt. Denkanstösse holen kannst...
Re: Abschneiden HTML Header
Verfasst: 09.05.2012 15:26
von shadow
kunstlust hat geschrieben:...
Ist der Header egal was ich herunterlade immer 10 Zeilen lang?
Nein, aber der Header wird immer durch die ersten zwei Zeilenschaltungen (je nach System/Server unterschiedlich, ob CR/CRLF/LF) beendet. Danach kommt _definitiv_ der Inhalt.
Re: Abschneiden HTML Header
Verfasst: 15.05.2012 22:34
von kunstlust
Ich habe mich nun erstmal für URLDownloadToFile_(0,"http://...","C:\...",0,0) entschieden, das ist zwar nur unter Windows zu nutzen, läuft aber besser als das ReceiveHTTPFile, warum verstehe ich auch nicht, liegt sicher an dem tollen Webserver...
Danke für die Hilfe
