代码之家  ›  专栏  ›  技术社区  ›  Paul Sasik

如何在重定向页面重定向之前捕获其HTML?

  •  0
  • Paul Sasik  · 技术社区  · 14 年前

    我正在尝试读取包含非延迟重定向的页面的HTML。以下代码段(C#)将为我提供目标/重定向页面,而不是我需要查看的初始页面:

    using System.Net;
    using System.Text;
    
    public class SomeClass {
        public static void Main() {
            byte[] data = new WebClient().DownloadData("http://SomeUrl.com");
            System.Console.WriteLine(Encoding.ASCII.GetString(data));
        }
    }
    

    4 回复  |  直到 14 年前
        1
  •  5
  •   Joel Etherton    14 年前

    除非重定向是在客户端完成的,否则你不能。如果重定向是在服务器端完成的,那么实际上不会向客户端生成html,但是头会在新服务器上重定向。

        2
  •  1
  •   Jim Mischel    14 年前

    这将需要更多的工作,但不是使用 WebClient ,使用 HttpWebRequest 并设置 AllowAutoRedirect 属性到 False . 重定向将抛出一个异常,但是您可以从异常的响应对象获得任何响应文本(有些页面在重定向的同时也有响应文本)。在得到异常的响应之后,可以发出另一个异常 HttpWeb请求 对于重定向URL(在 Location

    你呢 能够做类似的事情 WebRequest 如果创建派生对象, MyWebRequest GetWebRequest 方法并设置 财产。我不知道什么样的例外,如果有的话 DownloadData 如果您这样做,方法将返回。

    如前所述,这只适用于那些执行客户端重定向的页面(通常是301或302)。如果有服务器端重定向,你永远不会知道。

        3
  •  -1
  •   KeithS    14 年前

    Response.Redirect(newPage + "?FromPage=" + Request.Url);
    

    然后新的页面可以看到你从哪里拐杖只要看看 Request.QueryString("FromPage") .