2010-11-25 10 views
1

Ich möchte einfachen Text mit WebRequest-Klasse erhalten, genau wie wir bekommen, wenn wir webbrowser1.Document.Body.InnerText verwenden. Ich habe den folgenden Code versuchtWie bekomme ich Klartext von der Antwort einer WebRequest-Klasse in C#

public string request_Resource() 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myurl); 
    Stream stream = request.GetResponse().GetResponseStream(); 
    StreamReader sr = new StreamReader(stream); 
    WebBrowser wb = new WebBrowser(); 
    wb.DocumentText = sr.ReadToEnd(); 
    return wb.Document.Body.InnerText; 
} 

wenn ich ausführen dies ist ein NullReferenceException bekommen.

Gibt es eine bessere Möglichkeit, einen einfachen Text zu erhalten.

Hinweis: Ich kann die Webbrowsersteuerung nicht direkt zum Laden der Webseite verwenden, da ich nicht mit all diesen Ereignissen arbeiten möchte, die mehrfach ausgelöst werden, wenn eine Seite geladen wird.

UPDATE: Ich habe meinen Code geändert WebClient Klasse statt WebRequest auf Anregung verwenden Mein Code sieht ungefähr so ​​jetzt

public string request_Resource() 
{ 
    WebClient wc = new WebClient(); 
    wc.Proxy = null; 
    //The user agent header is added to avoid any possible errors 
    wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 (.NET CLR 3.5.30729; .NET4.0C)"); 
    return wc.DownloadString(myurl); 
} 

Ich erwäge HTML-Code Hilfspaket verwenden, kann jeder jemand empfehlen bessere Alternative.

+0

Einer der Vorschlag von @SLaks, habe ich HTML Utility Pack überprüft, kann jemand eine einfache Lösung vorschlagen, ohne 3rd Party Bibliotheken zu verwenden. Vielen Dank – Vamsi

+0

Überprüfen Sie diese SO-Antwort für die Verwendung von Html Agility Pack - http://Stackoverflow.com/questions/2785092/c-hthmagilitypack-extract-inner-text/2785108#2785108 –

+0

Danke Ihnen allen für das HTML-Dienstprogramm Pack Vorschlag, werde ich definitiv darüber nachdenken, aber bevor das getan wird, kann jeder andere Möglichkeit vorschlagen, dies zu tun. Kommen zu der Webclient-Klasse, ich habe bereits meinen Code geändert – Vamsi

Antwort

3

Sie suchen nach HTML Agility Pack, die HTML ohne IE analysieren können.
Es hat eine InnerText Eigenschaft.


Um Ihre Frage zu beantworten, müssen Sie warten, bis der Browser den Text parsen kann.


By the way, sollten Sie die WebClient Klasse statt WebRequest verwenden.

+0

Vielen Dank für das HTML-Agilität-Paket, ich werde überprüfen, dass – Vamsi

1

Verwendung webclient:

public string request_Resource() 
{ 
    WebClient wc = new WebClient(); 
    byte[] data = wc.DownloadData(myuri); 
    return Encoding.UTF8.GetString(data); 
} 

Dies gibt Ihnen den Inhalt der Website. Dann können Sie mit HtmlAgilityPack das Ergebnis analysieren.

+0

'wc.DownloadString (uri)' – SLaks

-2

Wenn Sie nur einfachen HTML-Text benötigen, dann haben Sie diesen Code bereits geschrieben.

public string request_Resource() 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myurl); 
    Stream stream = request.GetResponse().GetResponseStream(); 
    StreamReader sr = new StreamReader(stream); 
    return sr.ReadToEnd(); 
} 
+0

Ich habe klar erwähnt, dass ich einfachen Text brauche, ich nie erwähnte einfache HTML. Wie auch immer, danke – Vamsi