![]() |
MemoryStream dekomprimieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich versuche mich grade an einem lokalen HTTP-Proxy... Da ich bestimmte Seiten analysieren will, muss ich an die Daten rann, die tatsächlich übertragen werden...die stehen in einem TMemoryStream....und sind offensichtlich komprimiert oder verschlüsselt. eine Beispieldatei im Anhang (Google.de) ich habe versucht auf verdacht das ganze mit GZip zu dekomprimieren
Delphi-Quellcode:
Doch das schlägt mit einem Data Error fehl
function GZipStreamToString(const Input: TStream): string;
var DS: TZDecompressionStream; begin DS:=TZDecompressionStream.Create(Input); DS.Read(Result,DS.Size); DS.Free; end; ist GZip überhaupt richtig? was muss ich tun um den richtigen Text zu bekommen? Im Header steht folgendes drin: (danke jfheins) Zitat:
|
Re: MemoryStream dekomprimieren
Hi,
ist auf jeden Fall einfach GZip gepackt. Wenn du es entpackst bekommst du etwas wie Zitat:
Gruß Der Unwissende (vielleicht einfach mit einer anderen Komponente entpacken) |
Re: MemoryStream dekomprimieren
Zitat:
![]() |
Re: MemoryStream dekomprimieren
@Luckie:
sollte es dann so aussehen?
Delphi-Quellcode:
@DerUnwissende:
function GZipDecode(const Input: TStream): string;
var DS: TZDecompressionStream; i:Integer; begin DS:=TZDecompressionStream.Create(Input); SetLength(Result, DS.Size); i:=DS.Read(Result[1], DS.Size); Result:=copy(Result, 1, DS.Size); DS.Free; end; womit hast du es denn entpackt? |
Re: MemoryStream dekomprimieren
- i ist unnütz
- das Copy() auch - Resourcenschutzblock empfehlenswert
Delphi-Quellcode:
function GZipDecode(const Input: TStream): string;
var DS: TZDecompressionStream; begin DS := TZDecompressionStream.Create(Input); Try SetLength(Result, DS.Size); DS.Read(Result[1], DS.Size); Finally DS.Free; End; end; |
Re: MemoryStream dekomprimieren
Es funktioniert immer noch nicht :-/
also ich habe einen TIdHTTPProxyServer... Diesen nutze ich mit Firefox was auch alles klappt nun nutze ich das Event OnProxyHTTPDocument wie folge:
Delphi-Quellcode:
auch das funktioniert noch problemlos...in Listbox1 stehen alle geladenen Dokumente drin.
procedure TForm1.ProxyHTTPDocument(ASender: TIdHTTPProxyServer;
const ADocument: string; var VStream: TStream; const AHeaders: TIdHeaderList); var T: String; begin ListBox1.Items.Add(ADocument); ListBox1.Perform(WM_VSCROLL,SB_BOTTOM,0); //T:=GZipDecode(VStream); Memo1.Text:=T; end; zum dekodieren verwende ich dann das:
Delphi-Quellcode:
doch sobald ich das versuche kommt ein "data error".
function GZipDecode(const Input: TStream): string;
var DS: TZDecompressionStream; begin DS := TZDecompressionStream.Create(Input); Try SetLength(Result, DS.Size); DS.Read(Result[1], DS.Size); Finally DS.Free; End; end; Und ich habe absolut keine Idee mehr :( |
Re: MemoryStream dekomprimieren
Auf der Seite der GZipEx steht allerdings, dass er Dinge entpackt, wenn als Packformat im HTTP Header nicht gzip sonder deflate angegeben ist. Somit ist der Ansatz hier falsch.
|
Re: MemoryStream dekomprimieren
Wie wäre denn der richtige Ansatz?
|
Re: MemoryStream dekomprimieren
Zitat:
|
Re: MemoryStream dekomprimieren
:wall:
Denkfehler meinerseits... Ich dachte an einen Ansatz auch gzip zu können... Aber direkt das nächste Problem... zB im Event OnBeforeConnect (Find ich hört sich logisch an...) bekommt ich einen TIdContext übergeben. Wo kann ich da den Header ändern? (Ich find einfach die Eigenschaft nicht :? ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz