首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HTTPWebRequest等待Ajax加载内容

HTTPWebRequest等待Ajax加载内容
EN

Stack Overflow用户
提问于 2010-11-17 04:07:56
回答 3查看 5.6K关注 0票数 2

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

任何帮助都将不胜感激!

谢谢

EN

回答 3

Stack Overflow用户

发布于 2010-11-17 11:09:52

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

如果你想让它工作,你有两个选择。

1)发出对容器页面(您访问的主页)的请求,并向容器页面使用AJAX加载的包含页面发出第二个请求。为了找到包含的页面,您必须使用Firefox和firebug插件来确定内部页面的URL。

2)使用一些支持Javascript和HTML/DOM的高层框架。例如,你可以尝试使用托管在.NET中的微软的WebBrowser控件,或者你也可以使用其他框架,只要框架支持javascript并理解HTML。

票数 1
EN

Stack Overflow用户

发布于 2010-11-17 04:18:18

下面是我的代码

代码语言:javascript
运行
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2010-11-17 04:26:24

为什么不用下面这样简单的方法:

代码语言:javascript
运行
复制
 WebClient w = new WebClient();
 string pageSource = w.DownloadString(URL);

试一试,如果有效,则将所有其余属性添加到WebClient对象中

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4198449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档