Pregunta Cómo convertir WebResponse.GetResponseStream return en una cadena?


Veo muchos ejemplos, pero todos los leen en matrices de bytes o 256 caracteres a la vez, lentamente. ¿Por qué?

¿No es aconsejable simplemente convertir el resultado Stream valor en una cadena donde puedo analizarlo?


74
2017-09-25 02:44


origen


Respuestas:


Deberías crear un StreamReader alrededor de la corriente, luego llama ReadToEnd.

Deberías considerar llamar WebClient.DownloadString en lugar.


58
2017-09-25 02:49



Puedes usar StreamReader.ReadToEnd(),

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}

123
2017-09-25 02:53



Como @Heinzi mencionó, se debe usar el conjunto de caracteres de la respuesta.

var encoding = response.CharacterSet == ""
    ? Encoding.UTF8
    : Encoding.GetEncoding(response.CharacterSet);

using (var stream = response.GetResponseStream())
{
    var reader = new StreamReader(stream, encoding);
    var responseString = reader.ReadToEnd();
}

6
2017-10-09 15:22



Richard Schneider tiene razón. use el código a continuación para obtener datos del sitio que no sea utf8 charset obtendrá la cadena incorrecta.

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}

" No puedo votar. Así escribí esto.


4
2017-08-27 04:53



Puedes crear un StreamReader alrededor de la corriente, luego llama StreamReader.ReadToEnd().

StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();

2
2017-08-11 11:40