Extrahierung von Grafiken aus HTTP 1.1 Antwort
-
Hallo alle zusammen,
ich habe folgendes Problem:Ich stelle einen HTTP 1.1 Request und bekomme die Antwort. Soweit so gut.
Wie bekomme ich aus dieser Antwort dann eine Grafik?
Beispiel:
Ich sende folgendes ab:
GET www.softjako.de/img/cam.jpg HTTP/1.1
Host: www.softjako.de
Connection: closeAls Antwort erhalte ich dann:
HTTP/1.1 200 OK
Date: Tue, 15 Nov 2005 21:47:33 GMT
Server: Apache/df-exts 1.2 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d AuthPG/1.3
Last-Modified: Fri, 11 Nov 2005 19:03:24 GMT
ETag: "284076-c283-4374eafc"
Accept-Ranges: bytes
Content-Length: 49795
Connection: close
Content-Type: image/jpegÿØÿà
JFIF
...
-
Wo ist genau das Problem?
-
Convincer schrieb:
ÿØÿà
JFIF
...das ist deine grafik. Die Länge dazu steht im Header...
-
Das Problem taucht eher dann auf, wenn die Antwort chunked kommt. Oder wird das bei Binaries nicht gemacht?
-
Muss ich also nur die folgenden Zeilen rauslöschen und mit open(file,wb); usw. usf. die Datei speichern?
HTTP/1.1 200 OK
Date: Tue, 15 Nov 2005 21:47:33 GMT
Server: Apache/df-exts 1.2 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d AuthPG/1.3
Last-Modified: Fri, 11 Nov 2005 19:03:24 GMT
ETag: "284076-c283-4374eafc"
Accept-Ranges: bytes
Content-Length: 49795
Connection: close
Content-Type: image/jpegIch denke mal das wir uns einig sein, dass diese Zeilen definitiv keine Kopfzeilen einer JPEG Datei sind (sondern vom Apache Server für mich als Statusmeldung gedacht sind) und dort nichts zu suchen haben.
-
Convincer schrieb:
Ich denke mal das wir uns einig sein, dass diese Zeilen definitiv keine Kopfzeilen einer JPEG Datei sind (sondern vom Apache Server für mich als Statusmeldung gedacht sind) und dort nichts zu suchen haben.
Natürlich sind das keine Kopfzeilen einer JPEG-Datei. Das sind aber auch keine "Statusmeldungen", die dort nichts zu suchen hätten, sondern das HTTP.
Du fragst in HTTP, du bekommst deine Antwort in HTTP. Was genau von der Antwort die Nutzdaten sind, die du angefordert hast, steht in der Protokollspezifikation.
-
Das weiß ich. Nutzdaten sind alle Daten nach der ersten Leerzeile. Nur wie kann ich die Grafik ohne weiteres abspeichern? Da bräuchte ich einen kleinen Hinweis oder einen Beispielcode.
-
Convincer schrieb:
Das weiß ich. Nutzdaten sind alle Daten nach der ersten Leerzeile. Nur wie kann ich die Grafik ohne weiteres abspeichern? Da bräuchte ich einen kleinen Hinweis oder einen Beispielcode.
indem du nach der ersten leerzeile die datei einfach speicherst.
rapso->greets();
-
Prinziplösung in C++ (data ist ein istream, der die HTML-Daten bekommt, output ein ofstream für deine Datei):
do { getline(data,line); //verarbeite Header-Daten }while(line!="") char buffer[1000]; while(data) { data.read(buffer,1000); output.write(buffer,1000); }