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

时间:2010-09-07 18:51:17

标签: c# html vb.net language-agnostic redirect

我正在尝试阅读包含非延迟重定向的网页的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));
    }
}

有没有办法获取重定向页面的HTML? (我更喜欢.NET,但是Java或Python中的代码片段也没关系.Thx!)

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

这需要更多工作,但不是使用WebClient,而是使用HttpWebRequest并将AllowAutoRedirect属性设置为False。然后,重定向将引发异常,但您可以从异常的响应对象获取任何响应文本(并且某些页面确实具有响应文本以及重定向)。从异常中获得响应后,您可以为重定向URL发出另一个HttpWebRequest(在Location响应标头中指定)。

如果你创建了一个派生对象WebRequest,你可以 能够与MyWebRequest做类似的事情,你重载GetWebRequest方法并设置AllowAutoRedirect财产。我不知道什么样的异常,如果你做了类似的话,DownloadData方法会返回。

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

答案 2 :(得分:0)

如果您想获取html页面的来源,可以使用此工具: http://www.selfseo.com/html_source_view.php

答案 3 :(得分:-1)

最简单的答案是在重定向时将当前页面添加到重定向的QueryString组件中,例如:

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

然后,只需查看Request.QueryString("FromPage"),新页面就可以看到您从哪里开始。