タイトルに記載されているように、HTTP-Resonseを解凍したいと思います。これが私がすることです:
- http-responseを受信します
- コンテンツエンコーディングを確認します(gzipを想定します)
- http-responseからコンテンツを抽出します(このポイントの結果は、HTTP-Messageのコンテンツを含むバイト配列です)
- content-byte-arrayを解凍してみてください
ラストポイントが機能していません。「GZipヘッダーのマジックナンバーが正しくありません。GZipストリームを渡していることを確認してください。」というエラーが表示されます。
私が間違っていることを教えてもらえますか?
編集:まだ答えがないので、ここに解凍コードを投稿します:
public static byte[] Decompress_GZip(byte[] gzip)
{
using (GZipStream stream = new GZipStream(new MemoryStream(gzip),
CompressionMode.Decompress))
{
byte[] buffer = new byte[size];
using (MemoryStream memory = new MemoryStream())
{
int count = 0;
do
{
count = stream.Read(buffer, 0, size);
if(count>0)
{
memory.Write(buffer, 0, count);
}
}
while (count > 0);
return memory.ToArray();
}
}
}
私がまだ考えていること:エンディアンに何か問題があるのでしょうか?たぶん、GZipストリームはネットワークのバイトオーダーを処理できません。
編集:少なくとも私は気づきましたが、このエラーはチャンクメッセージを受信したときにのみ発生します。チャンクされたメッセージが次のようになっていると仮定しましょう。
STATUS-LINE
HEADER_1 /cr/n
...
HEADER_n /cr/n
/cr/n
CHUNK1_SIZE /cr/n
CHUNK1_DATA /cr/n
...
CHUNKn_SIZE /cr/n
CHUNKn_DATA /cr/n
0 /cr/n
それが私が推測することであり、メッセージを解凍するために私がしなければならないことです:
- に抽出
CHUNK1_DATA
しますCHUNKn_DATA
(最後のチャンク/cr/n
なしおよびなし)0
- Concat
CHUNK1_DATA
...CHUNKn_DATA
to onebyte-array
byte-array
上記のコードで解凍します
答えていただければ幸いです。