Announcement

Collapse
No announcement yet.

IdHTTPServer und Komprimierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • IdHTTPServer und Komprimierung

    Hallo,

    weil ich hierzu eben einen halben Tag 'vermplempert' habe und im Vorfeld im WWW nichts passendes fand, hier einmal ein paar Hinweise für einen HTTP - Server, der ZIP oder GZIP - komprimierte Anfragen bearbeitet.

    Ich hatte folgende Aufgabe:

    Ein HTTP Server erhält Anfragen mit Streamdaten (Method GET oder POST), die komprimiert sind. Diese müssen dekompriert , ausgewertet und beantwortet werden. Schließlich ist die Antwort ebenso komrimiert wieder zum Client zu schicken.

    Eigentlich ist die Lösung ganz einfach:

    Wir brauchen eine IdHTTPServer - Komponente sowie eine IdCompressorZLib - Komponente.
    Beides ist bei meinem D2009 Prof. standardmäßig mit installiert.


    Code:
    uses ... IDZlib;  
    
    procedure Tf_server.HTTPServerCommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    Var tmpStream:TStream;
    begin
     
    //decompress request - data
      tmpstream:=TMemoryStream.Create;
    //for zip - compression
      IdCompressorZLib.DecompressHTTPDeflate(ARequestInfo.PostStream,tmpStream);
    // for gZip - compression
     IdCompressorZLib.DecompressGZipStream(ARequestInfo.PostStream,tmpStream);
    
    // do something with tmpstream 
      
    // compress the answer / response
    // imagine resultdata in tmpstream again 
    
    // zip - compression
      IdCompressorZLib.CompressHTTPDeflate(tmpStream,AResponseInfo.ContentStream,4);
    // gzip - compression
      IdCompressorZLib.CompressStream(tmpStream,AResponseInfo.ContentStream,9,GZIP_WINBITS,9,0);
    
      tmpstream.free;
    
    end;

    Ja, das war's auch schon.

    Falls jemand noch einen Tipp hat, wie man an dieser Stelle mit BZIP2 - komprimierten Dateien umgeht, wäre ich dankbar.

    Grüße
    Tino
    Ich habs gleich!
    ... sagte der Programmierer.
Working...
X