2015-09-28 60 views
0

我正在做一个HttpWebRequest到服务器。这是JSON。现在,响应编码如下:C#HttpWebResponse返回编码的响应

�\b\0\0\0\0\0\0��A� @ѻ�U�0l�u�\v�v�...

我可以看到我的请求在Fiddler中成功。我可以看到服务器的响应是正确的。但是,在小提琴手中,它也需要我先解码答案。

我不知道如何解码这在C#中。

+1

它是gzip编码还是你知道编码是什么?这很难回答,它就像是“这里有一堆JSON格式的混乱数据,告诉我如何解码它”,不知道它是如何编码的,我们不能说如何解码它...... –

+1

做你的意思是*编码*(如UTF-16与UTF-8)或*压缩*(如gzip)或* encrypted *(为了安全)?这是一个HTTPS电话吗? –

+0

是的,你说得对。 Headers.Add(“Accept-Encoding:gzip,deflate”)。它没有为安全加密,它可能只是gzip。 – Pmx88

回答

0

这里有一些示例代码应该完全按照你的意愿来做。 BatchCollection在我的情况下是我自己的映射到JSON的对象,所以它可以在解压缩后映射。

 var request = (HttpWebRequest)WebRequest.Create(uri); 
     request.Method = "POST"; 
     request.Headers = headers; 
     request.Headers.Add("Content-Encoding", "gzip"); 
     request.AutomaticDecompression = DecompressionMethods.GZip; 
     request.ContentType = "application/json"; 

     var json = JsonConvert.SerializeObject(batchCollection); 

     using (Stream requestStream = request.GetRequestStream()) 
     { 
      var buffer = Encoding.UTF8.GetBytes(json); 

      using (GZipStream compressionStream = new GZipStream(requestStream, CompressionMode.Compress, true)) 
      { 
       compressionStream.Write(buffer, 0, buffer.Length); 
      } 
     } 

     var response = (HttpWebResponse)request.GetResponse(); 
     BatchCollection batchOut = null; 

     using (Stream responseStream = response.GetResponseStream()) 
     { 
      var reader = new StreamReader(responseStream); 
      var jsonOut = reader.ReadToEnd(); 
      reader.Close(); 
      batchOut = JsonConvert.DeserializeObject<BatchCollection>(jsonOut); 
     } 

     return batchOut;