gpt4 book ai didi

C# - GZipStream 魔数(Magic Number)不正确?

转载 作者:行者123 更新时间:2023-11-30 16:13:44 29 4
gpt4 key购买 nike

所以,我正在尝试制作一个程序,将计算机变成代理 using this .除了 gzip/deflate 页面之外,一切都很好。

每当我尝试解压缩时,我都会收到一个 InvalidDataException,指出 GzipHeader 中的魔数(Magic Number)不正确。

我使用这个函数:

private byte[] GZipUncompress(byte[] data)
{
using (var input = new MemoryStream(data))
{
input.Seek(0, SeekOrigin.Begin);

using (var gzip = new GZipStream(input, CompressionMode.Decompress))
using (var output = new MemoryStream())
{
output.Seek(0, SeekOrigin.Begin);
gzip.CopyTo(output);

return output.ToArray();
}
}
}

解压缩数据。错误:

error
(来源:gyazo.com)

如有任何帮助,我们将不胜感激。

编辑:我似乎到了某个地方!

按照 usr 的建议,我应该编写一个 HTTP 解析器来获取正文并将其解压缩。

解析前:http://pastebin.com/Cb0E8WtT

解析后:http://pastebin.com/k9e8wMvr

这是我用来到达 body 的方法:

    private byte[] HTTParse(byte[] data)
{
string http = ascii.GetString(data);
char[] lineBreak = crlf.ToCharArray();
string[] parts = http.Split(lineBreak);

List<byte> res = new List<byte>();

for (int i = 1; i < parts.Length; i++)
{
if (i % 2 == 0)
{
Regex r = new Regex(@"(.)*: (.)*");
Regex htt = new Regex(@"HTT(.)*/(.)*.(.)* d{1,50} (.)*");
if (!r.IsMatch(parts[i]) && !htt.IsMatch(parts[i]))
{
//Console.WriteLine("[TEST] " + parts[i]);
res.AddRange(ascii.GetBytes(parts[i]));
res.AddRange(ascii.GetBytes("\r\n"));
}

}
}
return res.ToArray();
}

但是,我仍然收到错误消息“GZip header 中的魔数(Magic Number)不正确。请确保您传入的是 GZip 流。”

编辑 (2):从 here 复制答案后,我已经成功地解压缩了身​​体。

新问题:Firefox。

error
(来源:gyazo.com)

我现在不确定我是否需要解压缩 gzip 页面..

我现在哪里出错了?

最佳答案

您说过,您将此代码用于 gzip/deflate。但 deflate 与 gzip 不同,尤其是它没有像 gzip 那样的神奇 header 。 Deflate 在 RFC1951 中定义,gzip 在 RC1952 中定义。此外,根据 RFC1950,Firefox 和 Chrome(但不包括 Internet Explorer)等浏览器也接受“raw deflate”。因此,在对正文应用解压缩之前,您必须首先根据“Content-Encoding” header 检查使用了哪种压缩。

关于C# - GZipStream 魔数(Magic Number)不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348910/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com