传输编码:在Windows Phone中分块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传输编码:在Windows Phone中分块相关的知识,希望对你有一定的参考价值。

我有一个使用Transfer-Encoding的服务器响应:chunked

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Mon, 18 Feb 2013 08:22:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding

c7
{<some json data>}
0

在json数据之前查看c7块大小。

如何使用HttpWebResponse在Windows Phone中读取没有块的原始响应流?


提示:要使服务器禁用分块输出,我只需要指定HTTP / 1.0协议版本。但我不知道怎么做,因为在Windows Phone或Silverlight中ProtocolVersion类中没有HttpWebRequest属性

答案

HttpClient能够自动解析chunked输出http://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx

HttpClient是PostAsync和GetAsinc的一个很酷的东西,还有很多其他优点。我再也没有使用过HttpWebRequest。

HttpClient可以在.NET Framework 4.5,Windows 8或Windows Phone 8.1中使用

如果您需要HttpClient,请使用NuGet包http://www.nuget.org/packages/Microsoft.Net.Http - .NET Framework 4 - Windows Phone Silverlight 7.5 - Silverlight 4 - 可移植类库

另一答案

您可以通过以下方式阅读分块响应:

public static byte[] ReadChunkedResponse(this WebResponse response)
    {
        byte[] buffer;

        using (var stream = response.GetResponseStream())
        {
            using (var streamReader = new StreamReader(stream, Encoding.UTF8))
            {
                var content = new StringBuilder();
                while (!streamReader.EndOfStream)
                {
                    content.Append((char)streamReader.Read());
                }

                buffer = Encoding.UTF8.GetBytes(content.ToString());
            }
        }

        return buffer;
    }

以上是关于传输编码:在Windows Phone中分块的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 使用 NSpeex 编码和解码音频。解码有问题?

HTTP协议之chunk编码(分块传输编码)

每日一洞 | 分块传输学习

禁用传输编码:在 Spring Webflux 响应中分块

HTTP协议之chunk编码(分块传输编码)

如何使用 HttpClient 在 ASP.Net C# 中禁用分块传输编码