HTTPWebRequest等待Ajax加载内容

时间:2010-11-16 20:07:56

标签: httpwebrequest

我正在尝试使用httpWebRequest来获得一个完整的网页,但我得到的响应并不是一个完整的网页,因为网页的一部分是由AJAX加载的,这部分需要一段时间(通常为10 - 30秒)载入)。有没有办法在检索网页内容之前设置/强制httpWebRequest等待几秒钟?

非常感谢任何帮助!

由于

3 个答案:

答案 0 :(得分:1)

如果网站使用AJAX加载数据,那么使用HttpWebRequest可能无法正常工作。原因是该站点可能正在使用document.onLoad()或page.onLoad()方法向远程站点发出GET请求。这发生在浏览器中的javascript执行中。

如果你想让它发挥作用,你有两个选择。

1)发出对容器页面(您访问的主页面)的请求,以及对使用AJAX由容器页面加载的包含页面的第二个请求。为了找到包含的页面,你必须使用带有firebug插件的Firefox来找出内页的URL。

2)使用一些支持Javascript和HTML / DOM的更高级别的框架。例如,您可以尝试使用.NET中托管的microsoft的WebBrowser控件。或者您可以使用其他框架,前提是框架支持javascript并理解HTML。

答案 1 :(得分:0)

以下是我的代码

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;

答案 2 :(得分:-1)

为什么不跟这样简单的东西一起去:

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

尝试此操作,如果有效,则将所有其余属性添加到WebClient对象