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: close

    Als 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/jpeg

    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.



  • 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);
    }
    

Anmelden zum Antworten