Wie konvertiere ich WebResponse.GetResponseStream-Rückgabe in eine Zeichenfolge?


79

Ich sehe viele Beispiele, aber alle lesen sie langsam in Byte-Arrays oder 256 Zeichen gleichzeitig ein. Warum?

Ist es nicht ratsam, den resultierenden StreamWert einfach in eine Zeichenfolge zu konvertieren, in der ich ihn analysieren kann?

Antworten:


59

Sie sollten ein StreamReaderum den Stream herum erstellen und dann aufrufen ReadToEnd.

Sie sollten WebClient.DownloadStringstattdessen anrufen .


1
Vielen Dank an SLaks, die jetzt DownloadString überprüfen. Tatsächlich erhalte ich andere Quellcode-Zeichenfolgen als meine alte App, in der browser.DocumentStream mithilfe der Winforms-Browsersteuerung verwendet wird. Sie denken, DownloadString würde das Problem beheben? Ich kann eine neue Frage erstellen, wenn sie nicht so einfach ist.
Joan Venge

5
Sie haben entweder ein Codierungsproblem oder müssen ein festlegen User-Agent.
SLaks

Danke SLaks, ich benutze jetzt DownloadString und es ist besser, dass Sie Recht haben. Jetzt unterscheidet sich das Ergebnis geringfügig, sollte keinen Unterschied machen, aber ich bekomme Sachen wie <a href=anstelle der alten, die es gab <A href=. Das hängt immer noch mit der Codierung zusammen, oder User-Agentdenkst du?
Joan Venge

2
Das klingt komisch; Es könnte vom IE normalisiert werden.
SLaks

3
WebClientund HttpWebRequestverwenden Sie rohes HTTP ohne Browser. Wenn verschiedene Browser unterschiedliche Ansichtsquellen anzeigen , liegt ein User-AgentProblem vor.
SLaks

139

Sie können verwenden StreamReader.ReadToEnd(),

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

1
@FaizanMubasher - Ich möchte LINQ To XML vorschlagen.
Adatapost

2
Schön, dass Sie darauf hingewiesen haben, StreamReadernimmt zweiten Parameter Encoding.UTF8.
Ich

5
Sollte die Codierung nicht auf dem Wert von response.CharacterSet basieren, anstatt einen festen Wert von UTF8 anzunehmen?
Heinzi

LINQ To XML-Beispiel?
PreguntonCojoneroCabrón

GetResponse and GetResponseStreamkann Ausnahmen
PreguntonCojoneroCabrón

10

Wie @Heinzi erwähnte, sollte der Zeichensatz der Antwort verwendet werden.

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();
}

5

Richard Schneider hat recht. Verwenden Sie den folgenden Code, um Daten von einer Site abzurufen, die kein utf8-Zeichensatz ist. Dadurch wird eine falsche Zeichenfolge angezeigt.

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

"Ich kann nicht wählen. Also schrieb ich das.


3

Sie können einen StreamReaderStream erstellen und dann aufrufen StreamReader.ReadToEnd().

StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.