如何压缩HttpWebRequest POST

Sco*_*ott 14 c# compression httpwebrequest

我试图将数据发布到接受压缩数据的服务器.下面的代码工作正常,但它是未压缩的.我没有使用压缩或Gzip beofre,所以任何帮助都是适当的.

HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
  request.Timeout = 600000;
  request.Method = verb;  // POST    
  request.Accept = "text/xml";

  if (!string.IsNullOrEmpty(data))
  {
    request.ContentType = "text/xml";        

    byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);
    request.ContentLength = byteData.Length;       

    // Here is where I need to compress the above byte array using GZipStream

    using (Stream postStream = request.GetRequestStream())
    {
      postStream.Write(byteData, 0, byteData.Length);         
    }
  }      

  XmlDocument xmlDoc = new XmlDocument();
  HttpWebResponse response = null;
  StreamReader reader = null;
  try
  {
    response = request.GetResponse() as HttpWebResponse;
    reader = new StreamReader(response.GetResponseStream());
    xmlDoc.LoadXml(reader.ReadToEnd());
  }
Run Code Online (Sandbox Code Playgroud)

我是否gzip整个字节数组?我是否需要添加其他标题或删除已存在的标题?

谢谢!

斯科特

tny*_*fst 13

要回答您提出的问题,要POST压缩数据,您需要做的就是使用gzip流包装请求流

 using (Stream postStream = request.GetRequestStream())
 {
    using(var zipStream = new GZipStream(postStream, CompressionMode.Compress))
    {
        zipStream.Write(byteData, 0, byteData.Length);         
    }
 }
Run Code Online (Sandbox Code Playgroud)

这与请求gzip响应完全不同,这是一个更常见的事情.

  • 这看起来非常接近我正在寻找的东西.但是,我得到一个"无法关闭流exc,直到写入所有字节"异常.还在调查那个.Flush()似乎没有帮助.此外,我仍然需要知道要使用哪些标头. (3认同)

fil*_*pov 5

我还使用类似于 tnyfst 的代码收到了“在写入所有字节之前无法关闭流”错误。问题是我有:

request.ContentLength = binData.Length;
Run Code Online (Sandbox Code Playgroud)

其中 binData 是我压缩前的原始数据。显然压缩内容的长度会有所不同,所以我只是删除了这一行并以以下代码结束:

using (GZipStream zipStream = new GZipStream(request.GetRequestStream(), CompressionMode.Compress))
{
    zipStream.Write(binData, 0, binData.Length);
}
Run Code Online (Sandbox Code Playgroud)


Ram*_*din 1

Page_Load事件中:

        Response.AddHeader("Content-Encoding", "gzip");
Run Code Online (Sandbox Code Playgroud)

对于发出压缩请求:

Rick StrahlHttpWebRequest 和 GZip Http 响应

  • 链接的文章解释了如何解压缩响应中返回的数据,但没有解释如何使用压缩数据构建请求。 (5认同)