La lecture de “chunked” réponse avec HttpWebResponse

Je vais avoir de la difficulté à lire un "chunked" réponse lors de l'utilisation d'un StreamReader pour lire le flux renvoyé par GetResponseStream() d'un HttpWebResponse:

//response is an HttpWebResponse
StreamReader reader = new StreamReader(response.GetResponseStream());
string output = reader.ReadToEnd(); //throws exception...

Lorsque le reader.ReadToEnd() méthode est appelée, je reçois le Système suivant.IO.IOException: Impossible de lire les données de la connexion de transport: La connexion a été fermée.

Le code ci-dessus fonctionne très bien lorsque le serveur renvoie un "non-chunked" réponse.

La seule façon que j'ai été en mesure de l'obtenir pour fonctionner est de l'utilisation de HTTP/1.0 pour la demande initiale (au lieu de HTTP/1.1, la valeur par défaut), mais cela semble comme une lame de travailler autour de.

Des idées?


@Chuck

Votre solution fonctionne assez bien. Ça en jette toujours la même IOExeception sur la dernière Lecture(). Mais après avoir inspecté le contenu de la classe StringBuilder elle ressemble à toutes les données ont été reçues. Alors peut-être que j'ai juste besoin d'envelopper le Lire() dans un try-catch et avaler le "erreur".

Pour lire des fragments de réponse, vous devez suivre en.wikipedia.org/wiki/Chunked_transfer_encoding
Je vais voir ce comportement .NET 4.6 connexion à la PowerDNS 3.4.5 HTTP API REST. Les solutions de contournement n'aident pas. Si j'avale l'exception, je perds une partie de la réponse.

OriginalL'auteur Craig | 2008-08-19