GZipStream 压缩
uutwo 2009-03-03 09:44:30 项目当中需要用到 GZipStream 解压缩。我先把我写的方法帖出来大家帮忙看一下。
public static string Post(string Url, string RequestString, int TimeoutSeconds)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
if (TimeoutSeconds > 0)
{
request.Timeout = 1000 * TimeoutSeconds;
}
request.Method = "POST";
request.AllowAutoRedirect = true;
byte[] data = System.Text.Encoding.GetEncoding("gb2312").GetBytes(RequestString);
if ((RequestString.Length > 4096) || (RequestString.IndexOf("transType=106") > -1))
{
try
{
request.ContentType = "application/x-gzip";
request.Accept = "application/x-gzip";
GZipStream outstream = new GZipStream(request.GetRequestStream(), CompressionMode.Compress);
outstream.Write(data, 0, data.Length);
outstream.Close();
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
else
{
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "";
Stream outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
}
HttpWebResponse hwrp = (HttpWebResponse)request.GetResponse();
string ContentType = hwrp.Headers.Get("Content-Type");
StreamReader sr = null;
if (ContentType.IndexOf("text/html") > -1)
{
sr = new StreamReader(hwrp.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));
}
else
{
sr = new StreamReader(new GZipStream(hwrp.GetResponseStream(), CompressionMode.Decompress), System.Text.Encoding.GetEncoding("gb2312"));
}
return sr.ReadToEnd();
}
这个方法会出现一个非常奇怪的问题,当我和别人进行联调的时候发现这个方法前面两次压缩是正常的,当进行到第三次压缩的时候就会出现非常异常的错误,当程序进行第三次压缩的时候程序不再运行下去了,用 try 也不行。