HTTPWebRequest ожидает загрузки контента с помощью Ajax - PullRequest
2 голосов
/ 16 ноября 2010

Я пытаюсь использовать httpWebRequest для получения полной веб-страницы, но полученный ответ не является полной веб-страницей, потому что часть веб-страницы загружается AJAX, и эта часть занимает некоторое время (обычно 10–30 секунд загрузить). Есть ли способ, которым я могу установить / заставить httpWebRequest подождать несколько секунд, прежде чем получить содержимое веб-страницы?

Любая помощь будет принята с благодарностью!

Спасибо

Ответы [ 3 ]

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

Если сайт использует AJAX для загрузки данных, использование HttpWebRequest может не работать.Причина в том, что сайт, вероятно, использует метод document.onLoad () или page.onLoad () для отправки запроса GET на удаленный сайт.И это происходит во время выполнения javascript в браузере.

Если вы хотите, чтобы это работало, у вас есть два варианта.

1) Выполните запрос на страницу контейнера (главная страницачто вы обращаетесь), и второй запрос к содержащейся странице, которая загружается страницей контейнера с использованием AJAX.Чтобы найти содержащуюся страницу, вам придется использовать Firefox с плагином firebug, чтобы выяснить URL внутренней страницы.

2) Использовать некоторые высокоуровневые инфраструктуры, поддерживающие Javascript и HTML / DOM.Например, вы можете попробовать использовать элемент управления WebBrowser от Microsoft, размещенный в .NET.Или вы можете использовать другие фреймворки, если они поддерживают javascript и понимают HTML.

0 голосов
/ 16 ноября 2010

почему бы не пойти с некоторыми простыми вещами вроде этого:

 WebClient w = new WebClient();
 string pageSource = w.DownloadString(URL);

попробуйте это, и если это сработает, добавьте все остальные ваши атрибуты в объект WebClient

0 голосов
/ 16 ноября 2010

Ниже мой код

HttpWebRequest httpWebRequest = null;
HttpWebResponse httpWebResponse = null;
Stream webResponseStream;
StreamReader streamReader;
string html = "";

try
{
    UTF8Encoding encoding = new UTF8Encoding();
    byte[] data = encoding.GetBytes(postData);
    httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)";
    httpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    httpWebRequest.ContentType = "application/x-www-form-urlencoded";

    httpWebRequest.KeepAlive = false;
    httpWebRequest.Method = WebRequestMethods.Http.Post;

    httpWebRequest.AllowAutoRedirect = true;
    httpWebRequest.Headers.Add("Accept-Language", "en-us");
    httpWebRequest.ContentLength = data.Length;


    Stream dataStream = httpWebRequest.GetRequestStream();
    dataStream.Write(data, 0, data.Length);
    dataStream.Close();

    httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    webResponseStream = httpWebResponse.GetResponseStream();

    // Reading the webResponseStream with streamReader object and assigning into one string
    streamReader = new StreamReader(webResponseStream);

    html = streamReader.ReadToEnd();

}
catch{

}

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