在Java中,我如何下载重定向的页面?

时间:2011-05-02 19:27:38

标签: java

我制作网络抓取工具,但有些网页会重定向到其他网页。我如何获得原始页面重定向的页面?

在某些网站如xtema.com.br中,我可以使用带有getHeaderField(“Location”)方法的HttpURLConnection类获取重定向的URL,但在其他类似visa.com.br中,重定向是使用javascript进行的或其他方式,此方法返回null。

有一些方法可以始终获取页面和重定向的URL吗?没有重定向的原始页面并不重要。

谢谢,抱歉英语不好。

编辑:使用httpConn.setInstanceFollowRedirects(true)来跟踪重定向并返回带有httpConn.getURL的URL,但我有两个问题。

1:如果之前调用httpConn.getDate,httpConn.getURL将仅返回重定向页面的实际url。如果我不这样做,它将在重定向之前返回原始URL。

2:像visa.com.br这样的网站得到答案200,但如果我在网络浏览器中打开,我会看到另一个页面。 例如:我的程序 - visa.com.br - 回答200(没有重定向) web broser - visa.com.br/go/principal.aspx - 我在程序中获得的不同版本的HTML代码

3 个答案:

答案 0 :(得分:4)

使用HttpURLConnection,默认情况下会重定向。

如果您想查看重定向的网址,则必须执行以下操作:

httpConn.setInstanceFollowRedirects( false );
httpConn.connect(); 
int responseCode = httpConn.getResponseCode();
while ((responseCode / 100) == 3) { /* codes 3XX are redirections */
   String newLocationHeader = httpConn.getHeaderField( "Location" );
   /* open a new connection and get the content for the URL newLocationHeader */
   /* ... */
   responseCode = httpConn.getResponseCode();
   /* do it until you get some code that is not a redirection */
}

答案 1 :(得分:0)

您无法轻松获得javascript重定向。默认情况下,HttpURLConnection处理HTTP重定向。您可以做的是,在页面内容中搜索几个关键字:

  • meta refresh代码
  • document.location=window.location=以及.href=

但这并不保证任何事情。人们可能会从外部js文件调用javascript函数,你几乎需要获取资源并解析javascript,我猜你不愿意这样做。

答案 2 :(得分:0)

我最终使用Apache's HTTP client。只是另一种选择。