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