2017-05-23 3 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(); 
     } 
    } 

il y a le code mais il donne une erreur de nombre magique. Comment puis-je trouver le début de la chaîne GZip, je pense que la source du problème est là. Quelqu'un peut-il aider?Comment puis-je trouver le début de la chaîne Gzip dans un MemoryStream?

+0

Qu'est-ce qu'une "chaîne gzip"? –

+0

L'erreur _ "Le nombre magique dans l'en-tête GZip n'est pas correct" _ signifie que vous avez affaire à un fichier non-Zip, ou que le fichier est corrompu. – CodeCaster

+0

J'essaie d'obtenir des données de corps HTTP à partir d'un paquet TCP. Son type de codage de transfert est Gzip. Je le convertis en flux de mémoire et essaye de le décompresser. Donne une fausse erreur de nombre magique, je pense, parce qu'elle n'obtient pas le bon point de départ. –

Répondre

0

Ne pas savoir où commence le flux gzip peut être ou ne pas être votre problème. (En fait, probablement pas.) Dans tous les cas, vous pouvez rechercher la séquence à trois octets 1f 8b 08 pour identifier les flux gzip candidats. Commencez à décompresser à partir du 1f pour voir s'il s'agit vraiment d'un flux gzip.

+0

Ok merci. Avec quelle méthode peut m'aider à rechercher l'ensemble des données de 1460 octets? –

+0

@ GökberkAçıkgöz Ce que vous avez (au mieux) est incomplet. 1460 est susceptible d'être de la taille d'un paquet (c'est une taille de paquet très commune, et le terme HttpDatagram est un gros cadeau ici ...). Vous devez quitter l'inspection des paquets et obtenir/assembler toute la réponse HTTP au-delà du retour chariot double qui signifie la fin des en-têtes. Vous ne pouvez pas choisir 1460 (ou moins) octets à partir d'une réponse GZipped et le jeter à un décodeur. Ça ne marche pas comme ça. Vous avez besoin du corps de réponse *** entier ***. – spender

+0

Oh merci, pouvez-vous m'aider à assembler tout le corps? –