我正在尝试阅读包含非延迟重定向的网页的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!)
答案 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")
,新页面就可以看到您从哪里开始。