Сбой Webclient.DownloadString - PullRequest
       3

Сбой Webclient.DownloadString

1 голос
/ 30 сентября 2010

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

код для функции:

        private void GetIP()
        {
        string pageTitle = functions.GetWebPageTitle("http://xyro18.woelmuis.nl/index.php");
        string[] ip = new string[2];
        ip = pageTitle.Split('|');
        currentIpLabel.Text = ip[0];
        webIpLabel.Text = ip[1];
        }

Теперь я обнаружил, что она падает в моей функции getWebPageTitle

код для функции:

public static string GetWebPageTitle(string url)
    {
        // Create a request to the url
        HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Method = "HEAD";
        // If the request wasn't an HTTP request (like a file), ignore it
        if (request == null) return null;

        // Use the user's credentials
        request.UseDefaultCredentials = true;

        // Obtain a response from the server, if there was an error, return nothing
        HttpWebResponse response = null;
        try { response = request.GetResponse() as HttpWebResponse; }
        catch (WebException) { return null; }

        // Regular expression for an HTML title
        string regex = @"(?<=<title.*>)([\s\S]*)(?=</title>)";

        // If the correct HTML header exists for HTML text, continue
        if (new List<string>(response.Headers.AllKeys).Contains("Content-Type"))
            if (response.Headers["Content-Type"].StartsWith("text/html"))
            {
                // Download the page
                WebClient web = new WebClient();
                web.UseDefaultCredentials = true;
                string page = web.DownloadString(url);

                // Extract the title
                Regex ex = new Regex(regex, RegexOptions.IgnoreCase);
                return ex.Match(page).Value.Trim();
            }

        // Not a valid HTML page
        return null;
    }

Это происходит сбой в сети. DownloadString

со сбоем, я имею в виду зависание и не отображает никаких исключений и т. Д.

1 Ответ

0 голосов
/ 30 сентября 2010

Ну, я не могу сказать, что знаю, почему он зависает, но вот несколько советов, которые могут помочь:

  • Звоните response.Close () , когда выпокончено с этим (например, когда вы возвращаетесь из метода).
  • Класс WebClient реализует IDisposable, поэтому вы должны попробовать конструкцию using.
  • Вместо создания новогоКаждый раз для регулярного сопоставления объекта Regex используйте статические методы в классе Regex .
  • Попробуйте установить для свойства web.Proxy значение null, чтобы убедиться, что оно не пытаетсяопределить прокси (как это было бы по умолчанию).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...