Как получить открытый текст из ответа класса WebRequest в C # - PullRequest
1 голос
/ 25 ноября 2010

Я хочу получить простой текст, используя класс 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 Class вместо 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, может кто-нибудь предложить какую-нибудь лучшую альтернативу.1018 *

Ответы [ 3 ]

3 голосов
/ 25 ноября 2010

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


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


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

1 голос
/ 25 ноября 2010

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

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

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

0 голосов
/ 25 ноября 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();
}
...