2015-09-28 58 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;