Подтвердить что ты не робот

Чтение данных с веб-сайта с использованием С#

У меня есть веб-страница, на которой нет ничего, кроме строки (-ов). Нет изображений, цвет фона или что-то еще, просто какой-то простой текст, который на самом деле не так длинный.

Мне просто интересно, что лучше (тем самым, я имею в виду самый быстрый и эффективный) способ передать строку на веб-странице, чтобы я мог использовать ее для чего-то еще (например, отображения в текстовом поле)? Я знаю WebClient, но я не уверен, что он будет делать то, что я хочу, и, кроме того, я не хочу даже пытаться это сделать, даже если он работает, потому что в последний раз, когда я делал это, это заняло приблизительно 30 секунд для простая операция.

Любые идеи будут оценены.

4b9b3361

Ответ 1

Класс WebClient должен быть более чем способен обрабатывать описанную вами функциональность, например:

System.Net.WebClient wc = new System.Net.WebClient();
byte[] raw = wc.DownloadData("http://www.yoursite.com/resource/file.htm");

string webData = System.Text.Encoding.UTF8.GetString(raw);

или (в дополнение к предложению Фредрика в комментариях)

System.Net.WebClient wc = new System.Net.WebClient();
string webData = wc.DownloadString("http://www.yoursite.com/resource/file.htm");

Когда вы говорите, что потребовалось 30 секунд, можете ли вы расширить это немного больше? Есть много причин, почему это могло произойти. Медленные серверы, интернет-соединения, хитроумная реализация и т.д. И т.д.

Вы можете пойти на уровень ниже и реализовать что-то вроде этого:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com/resource/file.htm");

using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8))
{
    streamWriter.Write(requestData);
}

string responseData = string.Empty;
HttpWebResponse httpResponse = (HttpWebResponse)webRequest.GetResponse();
using (StreamReader responseReader = new StreamReader(httpResponse.GetResponseStream()))
{
    responseData = responseReader.ReadToEnd();
}

Однако в конце дня класс WebClient завершает эту функцию для вас. Поэтому я предлагаю вам использовать WebClient и исследовать причины задержки 30 секунд.

Ответ 2

Если вы загружаете текст, я бы рекомендовал использовать WebClient и получить поток-текст для текста:

        WebClient web = new WebClient();
        System.IO.Stream stream = web.OpenRead("http://www.yoursite.com/resource.txt");
        using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
        {
            String text = reader.ReadToEnd();
        }

Если это займет много времени, это, вероятно, проблема сети или проблема на веб-сервере. Попробуйте открыть ресурс в браузере и посмотреть, сколько времени потребуется. Если веб-страница очень велика, вы можете захотеть просмотреть ее в кусках, а не читать весь путь до конца, как в этом примере. Посмотрите http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx, чтобы узнать, как читать из потока.

Ответ 3

Относительно предложения Поэтому я предлагаю вам использовать WebClient и исследовать причины задержки 30 секунд.

Из ответов на вопрос System.Net.WebClient неоправданно медленный

Попробуйте установить Proxy = null;

WebClient wc = новый WebClient();     wc.Proxy = null;

Кредит Алексу Бурцеву

Ответ 4

 WebClient client = new WebClient();
            using (Stream data = client.OpenRead(Text))
            {
                using (StreamReader reader = new StreamReader(data))
                {
                    string content = reader.ReadToEnd();
                    string pattern = @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";
                    MatchCollection matches = Regex.Matches(content,pattern);
                    List<string> urls = new List<string>();
                    foreach (Match match in matches)
                    {
                            urls.Add(match.Value);
                    }

              }