HttpWebRequest只返回主页

时间:2009-07-09 08:01:46

标签: c# asp.net httpwebrequest

您好我尝试使用HttpWebRequest读取页面

    string lcUrl = "http://www.greatandhra.com";
    HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(lcUrl);
    loHttp.Timeout = 10000;     // 10 secs
    loHttp.UserAgent = "Code Sample Web Client";
    HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
    Encoding enc = Encoding.GetEncoding(1252);  // Windows default Code Page
    StreamReader loResponseStream =
       new StreamReader(loWebResponse.GetResponseStream(), enc);
    string lcHtml = loResponseStream.ReadToEnd();
    mydiv.InnerHtml = lcHtml;
   // Response.Write(lcHtml);
    loWebResponse.Close();
    loResponseStream.Close();

我能够读取该页面并将其绑定到mydiv。但是,当我点击该div中的任何一个链接时,它不会显示任何结果。因为我的应用程序不包含整个站点。那么我们现在要做什么。

有人可以复制我的代码并测试它plz

纳古

6 个答案:

答案 0 :(得分:1)

我很确定你不能在没有破坏东西的情况下在DIV中插入整页。事实上,整个head标签可能会被完全跳过(并且可能无法运行任何javascript代码)。考虑到你似乎想要做的事情,我建议你使用一个带有动态src的IFRAME,这也有望解除你服务器的压力(这将不再负责获取要镜像的html)。

答案 1 :(得分:1)

如果你真的想要将整页HTML嵌入另一页,那么IFRAME标签可能就是使用它而不是DIV。

您不必创建Web请求并拥有所有代码来检索远程页面,您只需将IFRAME的src属性设置为指向您希望它显示的页面即可。

例如,标记中的类似内容:

<iframe src="<%=LcUrl %>" frameborder="0"></iframe>

其中LcUrl是代码隐藏页面上的属性,它会从您的示例中公开您的字符串 lcUrl

或者,您可以使IFRAME runat =“server”并以编程方式设置其src属性(或者如果 想要的话,甚至以与您的代码示例相同的方式注入innerHTML)。< / p>

答案 2 :(得分:0)

你放入的代码。div的内部HTML包含整个页面(包括&lt; html&gt;,&lt; body&gt;,&lt; / html&gt;和&lt; / body&gt;),它们可以导致一个miriad任意数量的浏览器出现问题。

我要么移动到iframe,要么考虑某种解析远程站点的HTML并显示转换后的版本(即剥离HTML,BODY,META标签,替换一些链接URL等)。

答案 3 :(得分:0)

  

但是当我点击该div中的任何一个链接时,它都没有显示任何结果

可能是因为下载页面中的链接是相对的...如果您只是将HTML复制到页面中的DIV中,浏览器会考虑相对于当前URL的链接:它不知道这个链接的来源内容。我认为解决方案是解析下载的HTML,并将href属性中的相对URL转换为绝对URL

答案 4 :(得分:0)

如果你想嵌入它,除了身体部位之外,你需要除掉一切。这意味着您必须为&lt; body ....&gt;解析字符串lcHTML并删除之前的所有内容并包含body标签。您还必须去掉&lt; / body&gt;中的所有内容。然后你需要解析所有出现的&lt; a href =“.....”&gt;的字符串。不以http://开头,包括h t t p://www.greatandhra.com或设置&lt; base target =“h t t p://www.greatandhra.com”&gt;在你的头部。

如果您不想嵌入,只需清除响应缓冲区并将lcHTML字符串流回浏览器。

PS:我必须用空格写下所有空格才能发布。

答案 5 :(得分:0)

您尝试做的事情就是显示您网站中嵌入的其他网站。为了通过将它放入div来工作,你必须在body标签之间提取代码,因为它对html无效并且在另一个页面的中间。

链接无法正常工作,因为您现在已经在网站中将该页面脱离了上下文,因此您还必须重写页面上相对的任何链接(即不以http开头)指向到您网站上的一个页面,然后将获取其他网站页面并将其显示回您的网站,或者您可以将您抓取的网站的网址添加到所有相关链接的开头,以便它们链接回该网站