Как получить открытый текст из ответа класса WebRequest в С#

Я хочу получить обычный текст, используя класс WebRequest, точно так же, как мы получаем, когда используем webbrowser1.Document.Body.InnerText . Я пробовал следующий код

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

когда я выполняю это, получаю NullReferenceException.

Есть ли лучший способ получить обычный текст.

Примечание. Я не могу использовать элемент управления веб-браузером напрямую для загрузки веб-страницы, потому что я не хочу иметь дело со всеми теми событиями, которые запускаются несколько раз при загрузке страницы.

ОБНОВЛЕНИЕ: по предложению я изменил свой код, чтобы использовать класс WebClient вместо WebRequest. Теперь мой код выглядит примерно так

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

Я рассматриваю возможность использования HTML Utility Pack, может ли кто-нибудь предложить лучшую альтернативу.


person Vamsi    schedule 25.11.2010    source источник
comment
Одно из предложений @SLaks, я проверил HTML Utility Pack, может ли кто-нибудь предложить простое решение без использования сторонних библиотек. Спасибо   -  person Vamsi    schedule 25.11.2010
comment
Ознакомьтесь с этим ответом SO для использования Html Agility Pack - stackoverflow.com/questions/2785092/   -  person Mikael Svenson    schedule 25.11.2010
comment
Спасибо всем за предложение HTML Utility Pack, я обязательно рассмотрю его, но перед этим кто-нибудь может предложить какой-либо другой способ сделать это. Переходя к классу Webclient, я уже изменил свой код   -  person Vamsi    schedule 25.11.2010


Ответы (3)


Вам нужен HTML Agility Pack, который может анализировать HTML без IE.
Он имеет InnerText собственность.


Чтобы ответить на ваш вопрос, вам нужно дождаться, пока браузер проанализирует текст.


Кстати, вы должны использовать класс WebClient вместо WebRequest.

person SLaks    schedule 25.11.2010
comment
Спасибо за пакет гибкости HTML, я проверю его - person Vamsi; 25.11.2010

Используйте веб-клиент:

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

Это даст вам содержание веб-сайта. Затем вы можете использовать HtmlAgilityPack для анализа результата.

person Aliostad    schedule 25.11.2010

Если вам нужен простой HTML-текст, значит, вы уже написали этот код.

public string request_Resource()
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myurl);
   Stream stream = request.GetResponse().GetResponseStream();
   StreamReader sr = new StreamReader(stream);
   return sr.ReadToEnd();
}
person user179437    schedule 25.11.2010
comment
Я четко упомянул, что мне нужен простой текст, я никогда не упоминал простой html. В любом случае спасибо - person Vamsi; 26.11.2010