Philipp Hasenfratz: fsocketopen() Header und Inhalt trennen

Beitrag lesen

Halihallo AllesMeins

ich versuche gerade eine Datei (Bild oder HTML) per fsocketopen und GET von einem Server runter zu laden. Das klappt auch prima nur fehlt mir das nötige Hintergrundwissen um Inhalt und den mitgesendeten Header sicher voneinander zu trennen.

http://ftp.ics.uci.edu/pub/ietf/http/rfc1945.html#Message

Meine erste Idee war am doppelten \r\n zu trennen, da ja eine Leere Zeile das ende vom Header ist. Doch dann ist mir aufgefallen das nach dem \r\n\r\n der eigentliche Inhalt noch nicht direkt beginnt, sondern erst noch eine Zeile mit einer dreistelligen Kombination (113 oder f1d) folgt.

Das muss ein anderer Fehler sein. Nach HTTP gibt es genau einen Delimiter für Message-Header und -Response: CRLF (\015\012) + natürlich das CRLF des letzten Headers. Der Delimiter ist also wirklich _eine einzige_ Leerzeile.

Wie kann ich also sicher trennen (auch ich Hinsicht auf eventuelle Probleme wenn die empfangene Datei dieses Zeichen enthält (bsp. ich würde am \r\n\r\n trennnen, was wäre wenn jemand in eine Datei genau diese Kombination auch rein schreibt. )

Wie gehabt: Trenne bei dem ersten CRLFCRLF. Dies entspricht _nicht_ \r\n! - Benutze "\015\012\015\012". Alles, was nach dem CRLFCRLF folgt _ist_ die Datei, es spielt also keine Rolle, wenn dort nochmals CRLFCRLF folgt. Das erste Auftreten von CRLFCRLF ist entscheidend.

Viele Grüsse

Philipp