C # HttpWebRequest зависает программа внезапно.Не раньше - PullRequest
0 голосов
/ 24 июля 2011

Ранее я сделал запрос HttpWebRequest, который отлично работал, и мой StreamReader отлично прочитал HTML-код веб-сайта.

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

Дело в том; Я попытался ввести сайт, отличный от того, который мне нужно использовать (я ввел www.google.com), и он работал отлично. Поэтому я сделал вывод, что мне больше не нужен доступ только к веб-сайту, из-за которого я думаю, что конечная часть (веб-сайт) отменяет мое соединение или блокирует меня или что-то в этом роде. НО! Сам HttpWebRequest не зависает или что-то еще, что должно означать, что он успешно установил запрос к веб-сайту?

Достаточно болтовни, вот код:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("website here");
MessageBox.Show("1"); //This is shown.
string HTMLLink = (new     StreamReader(request.GetResponse().GetResponseStream())).ReadToEnd(); //This is where the     program hangs....
MessageBox.Show("2"); //This is not shown! Below this isn't being executed.
if (HTMLLink.Length > 0)
{
    HTMLLink = HTMLLink.Substring(HTMLLink.IndexOf("uuu"), HTMLLink.Length -     HTMLLink.IndexOf("uuu"));
    HTMLLink = HTMLLink.Substring(0, HTMLLink.IndexOf("\" TARGET="));
    request = (HttpWebRequest)WebRequest.Create(HTMLLink);
    string HTML = (new     StreamReader(request.GetResponse().GetResponseStream())).ReadToEnd();
    if (HTML.Length > 0 && HTML.Contains(" </script><br><br><br>") && HTML.Contains("    <br><br><script "))
    {
        HTML = HTML.Substring(HTML.IndexOf(" </script><br><br><br>") + 22,     HTML.IndexOf("<br><br><script "));
        HTML = HTML.Substring(0, HTML.IndexOf("<br><br><script "));
        HTML = HTML.Replace("\r\n", "");
        HTML = HTML.Replace("\n", "");
        HTML = HTML.Replace("<br>", "\r\n");
        HTML = HTML.Replace("<BR>", "\r\n");
        HTML = HTML.Replace("<br />", "\r\n");
        HTML = HTML.Replace("<BR />", "\r\n");
        textBox.Text = HTML;
    }
}

И имейте в виду, что он работал отлично раньше, чем внезапно начал зависать, и что он отлично работает с www.google.com.

И, кстати, да, я провел много поисков. Нет полезных результатов.

Я уже попробовал тайм-аут, тайм-аут работает. Может, сайт заблокировал мою программу, думая, что это паук? что тогда?

Каждый раз, когда я достигаю StreamReader (независимо от того, как я его настроил), он начинает зависать. И он продолжает висеть, это не дает никакого результата. Это ТОЛЬКО происходит с lyrics007.com, это именно тот сайт, который мне нужен. Работает нормально с гуглом.

Помогите, пожалуйста!

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 24 июля 2011

WebRequest.GetResponse() - это блокирующий вызов.Он будет ожидать успешного подключения и получения ответа, прежде чем вернет управление вызывающей стороне, или выдаст исключение в случае неудачи.Это поведение нельзя изменить.

Обычно вы не хотите, чтобы ваше приложение находилось в ожидании, когда что-то произойдет, поэтому вы обычно делегируете вызов GetResponse () другому потоку, чтобы вы могли продолжать делать другиеработать в текущем потоке.

Обычный способ преодолеть эту проблему - вызвать асинхронно.Вместо вызова GetResponse вы вызовете BeginGetResponse(), передав функцию, которая должна быть выполнена после завершения операции (например, содержащая остаток вашего текущего метода плюс вызов EndGetResponse()).Контроль выполнения может быть передан вызывающей стороне, пока ответ находится в фоновом потоке, который автоматически обрабатывается пулом потоков .NET.

0 голосов
/ 24 июля 2011

Запрос не отправляется до звонка на GetResponse. Если это то, где он висит, я бы сказал, что сайт не отвечает. Вы пытались использовать веб-браузер для подключения к этому URL и посмотреть, работает ли он?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...