2017-05-23 1 views
0
byte[] httpDecompress(HttpDatagram http) 
    { 
     int magicnum = 0x1f8b; 
     Stream str= http.Body.ToMemoryStream(); 
     using (var zipStream = new GZipStream(str, CompressionMode.Decompress)) 
     using (var resultStream = new MemoryStream()) 
     { 
      zipStream.CopyTo(resultStream); 
      return resultStream.ToArray(); 
     } 
    } 

dort ist der Code, aber es gibt eine magische Zahl Fehler. Wie kann ich den Anfang der GZip-Zeichenfolge finden, ich denke, die Quelle des Problems ist da. Kann jemand helfen?Wie kann ich den Anfang der Gzip-Zeichenfolge in einem MemoryStream finden?

+0

Was ist ein "gzip String"? –

+0

Der Fehler _ "Die magische Zahl im GZip-Header ist nicht korrekt" _ bedeutet, dass es sich um eine Nicht-Zip-Datei handelt oder die Datei beschädigt ist. – CodeCaster

+0

Ich versuche HTTP-Body-Daten von einem TCP-Paket zu bekommen. Der Übertragungscodierungstyp ist Gzip. Ich konvertiere es in den Speicherstream und versuche es zu dekomprimieren. Gibt einen falschen magischen Zahlenfehler, den ich denke, weil es nicht den richtigen Anfangspunkt erhält. –

Antwort

0

Nicht zu wissen, wo der Gzip-Stream startet, kann oder kann nicht Ihr Problem sein. (In der Tat, wahrscheinlich nicht.) In jedem Fall können Sie nach der Drei-Byte-Sequenz 1f 8b 08 suchen, um Kandidaten-Gzip-Streams zu identifizieren. Beginnen Sie mit der Dekomprimierung von 1f, um zu sehen, ob es wirklich ein gzip-Stream ist.

+0

Ok danke. Mit welcher Methode kann ich bei der Suche nach den ganzen 1460 Byte Daten helfen? –

+0

@ GökberkAçıkgöz Was Sie (am besten) haben, sind unvollständige Daten. 1460 ist wahrscheinlich die Größe eines Pakets (es ist eine sehr häufige Paketgröße, und der Begriff HttpDatagram ist hier ein großes Giveaway ...). Sie müssen weg von der Inspektion von Paketen gehen und die gesamte HTTP-Antwort über die doppelte Wagenrückkehr, die das Ende der Header anzeigt, abholen. Sie können nicht nur 1460 (oder weniger) Bytes aus einer GZipped-Antwort auswählen und sie an einen Decoder werfen. So funktioniert es nicht. Sie benötigen den *** gesamten *** Antworttext. – spender

+0

Oh danke, kannst du mir helfen, den ganzen Körper zu montieren? –

Verwandte Themen