Передача-кодировка: чанкованная в 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

Посмотрите, что размер с7 перед данными JSON.

Как я могу прочитать поток сырых ответов без чанков в Windows Phone, используя HttpWebResponse?


Подсказка: чтобы отключить блокировку вывода, мне просто нужно указать версию протокола HTTP/1.0. Но я не знаю, как это сделать, так как нет ProtocolVersion недвижимость в HttpWebRequest класс в Windows Phone или Silverlight

2 ответа

Решение

HttpClient может автоматически анализировать фрагментированный вывод 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

Используйте пакет NuGet http://www.nuget.org/packages/Microsoft.Net.Http если вам нужен HttpClient в.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;
    }
Другие вопросы по тегам