我有一个处理HTTP请求的代理。
现在,当我收到GZipped HTTP响应时,我正在解压缩它:
MemoryStream ms = new MemoryStream();
if (response.ContentLength > 0)
buffer = new Byte[response.ContentLength];
else
buffer = new Byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
string resp = "";
if (response.ContentEncoding == "gzip")
resp = Utilities.GZip.Unzip(ms.ToArray());
else
resp = Encoding.UTF8.GetString(ms.ToArray());
Utilities.GZip.Unzip在哪里:
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(msi, CompressionMode.Decompress))
{
CopyTo(gs, mso);
}
return Encoding.UTF8.GetString(mso.ToArray());
}
到目前为止一切都很好,我可以阅读HTML。
现在我必须将响应写回请求它的客户。
像这样:
byte[] outByte;
if (response.ContentEncoding == "gzip")
outByte = Utilities.GZip.Zip(resp);
else
outByte = Encoding.UTF8.GetBytes(resp);
outStream.Write(outByte, 0, outByte.Length);
Utilities.GZip.Zip在哪里:
var bytes = Encoding.UTF8.GetBytes(str);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(mso, CompressionMode.Compress))
{
CopyTo(msi, gs);
}
return mso.ToArray();
}
现在这是一个非常奇怪的行为,响应字节数组的长度为16990(压缩),但我自己的压缩字节数组的长度为19379。
客户得到回复,但它被切断了。
有什么建议吗?
修改
为了您的信息,我将原始的MemoryStream不变地发送给客户端,一切都很好!