Leerzeile in Handle erkennen
hotti
- perl
hi,
s. Thema. Es geht um eine HTTP/1.0-Response, die ich direkt aus einem socket lesen möchte (wird eine ziemlich fette binary die Response). Nun sind die Mittelchen, ein Handle zu lesen recht bescheiden, ich muss der read()-Funktion sagen, wieviele Bytes zu lesen sind, wie kann ich da die Leerzeile erkennen, die zwischen headers und body steht?
Bitte mal um Hinweise,
Hotti
s. Thema. Es geht um eine HTTP/1.0-Response, die ich direkt aus einem socket lesen möchte (wird eine ziemlich fette binary die Response). Nun sind die Mittelchen, ein Handle zu lesen recht bescheiden, ich muss der read()-Funktion sagen, wieviele Bytes zu lesen sind, wie kann ich da die Leerzeile erkennen, die zwischen headers und body steht?
Ich versteh dich vermutlich jetzt falsch, aber such doch einfach nach \r\n\r\n bzw. 0D0A0D0A
hi,
s. Thema. Es geht um eine HTTP/1.0-Response, die ich direkt aus einem socket lesen möchte (wird eine ziemlich fette binary die Response). Nun sind die Mittelchen, ein Handle zu lesen recht bescheiden, ich muss der read()-Funktion sagen, wieviele Bytes zu lesen sind, wie kann ich da die Leerzeile erkennen, die zwischen headers und body steht?
Ich versteh dich vermutlich jetzt falsch, aber such doch einfach nach \r\n\r\n bzw. 0D0A0D0A
Da müsste ich dann sukzessive 4 byte aus dem Socket lesen... Du bringst mich auf eine Idee. Es ist ja nicht sicher, dass der Webserver genau diese 4 byte als Leerzeile nach dem Header sendet, aber: Wenn ich ein nph-Script (non parsed header) baue, kann ich das selbst festlegen.
Danke Dir,
Hotti
hi,
Da müsste ich dann sukzessive 4 byte aus dem Socket lesen... Du bringst mich auf eine Idee. Es ist ja nicht sicher, dass der Webserver genau diese 4 byte als Leerzeile nach dem Header sendet, aber: Wenn ich ein nph-Script (non parsed header) baue, kann ich das selbst festlegen.
Auf die Schnelle mal ein nph-Script 'hingehauen'. Nach den headers, die ein nph-Script alle selbst ausgeben muss (der Webserver macht hier nüschd), die präparierte Leerzeile:
print pack "CCCC", 0xD, 0xA, 0xD, 0xA;
Erster Test erfolgreich, läuft beim Provider (Linux egal) und bei mir auf XP! Und jetzt ab in die RFCs, morgen wirds ins Reine geschrieben ;)
Grüße an Alle,
Horst Schlaflos
moin,
s. Thema. Es geht um eine HTTP/1.0-Response, die ich direkt aus einem socket lesen möchte (wird eine ziemlich fette binary die Response). Nun sind die Mittelchen, ein Handle zu lesen recht bescheiden, ich muss der read()-Funktion sagen, wieviele Bytes zu lesen sind, wie kann ich da die Leerzeile erkennen, die zwischen headers und body steht?
Ich versteh dich vermutlich jetzt falsch, aber such doch einfach nach \r\n\r\n bzw. 0D0A0D0A
Nochmal nachgefragt: Senden alle Webserver (Apache) die Leerzeile nach dem Header in genau dieser Bytefolge?
Mein XP-Apache (Apache/2.2.14 (Win32)) tut das jedenfalls und auch der Apache meines Providers auf Linux-irgendwas.
Hotti
Nochmal nachgefragt: Senden alle Webserver (Apache) die Leerzeile nach dem Header in genau dieser Bytefolge?
Lt. Spezifikation ja - der Header wird durch zwei aufeinanderfolgende CRLF beendet - genauer gesagt durch eine neue Zeile die sofort mit CRLF beendet wird. Da das vorhergehende Header-Feld aber auch mit CRLF beendet wird, entspricht das quasi CRLFCRLF
"The entity body is separated from the headers by a null line (i.e., a line with nothing preceding the CRLF)"
... gleichzeitig steht aber auch folgendes dort:
http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Tolerant
"The line terminator for HTTP-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR."
Es kann also gut sein, dass CRLFCRFL vorkommt oder einfach nur LFCRLF oder LFLF
hi,
"The line terminator for HTTP-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR."
Es kann also gut sein, dass CRLFCRFL vorkommt oder einfach nur LFCRLF oder LFLF
Danke Dir! Hab auch gerade RFCs gelesen. Wenn es Abweichungen gibt, lässt sich das ja feststellen. Oder ich nehme ein nph-Script, was definitiv CRLFCRLF vorgibt. Für den Eigenbedarf reicht jedoch ein normales CGI.
Ansonsten ist soweit schonmal alles in Butter und bewährt sich praktisch ;)
Viele Grüße,
Hotti