如何以编程方式检查页面的URL是否重定向?

时间:2011-09-14 09:03:37

标签: java groovy

我正在尝试提取网页的内容A.使用groovy我尝试了以下

......
String urlStr = "url-of-webpage-A"
String pageText = urlStr.toURL().text
//println pageText
.....

上面的代码检索webPage A的文本,只要它不重定向到其他网页B.如果A重定向到B,则在pageText变量中检索webPage B的页面内容。有没有办法编码并检查webPage A是否重定向到其他网页(在groovy或java中)?

PS:上面的代码不是服务器端逻辑的一部分。我正在桌面应用范围内的客户端执行它。

2 个答案:

答案 0 :(得分:14)

在Java中,您可以使用URL.openConnection()获取HttpURLConnection(您需要投射)。在此,您可以拨打setInstanceFollowRedirects(false)

然后,您可以使用getResponseCode()并查看HTTP_MOVED_PERM(301),HTTP_MOVED_TEMP(302)或HTTP_SEE_OTHER(303)。它们都表明了重定向。

如果您需要知道 您被重定向到的位置,那么您可以使用getHeaderField("Location")获取位置标题。

答案 1 :(得分:4)

在groovy中,你可以通过以下方式做Joachim suggests

String location = "url-of-webpage-A"
boolean wasRedirected = false
String pageContent = null

while( location ) {
  new URL( location ).openConnection().with { con ->
    // We'll do redirects ourselves
    con.instanceFollowRedirects = false

    // Get the response code, and the location to jump to (in case of a redirect)
    location = con.getHeaderField( "Location" )
    if( !wasRedirected && location ) {
      wasRedirected = true
    }

    // Read the HTML and close the inputstream
    pageContent = con.inputStream.withReader { it.text }
  }
}

println "wasRedirected:$wasRedirected contentLength:${pageContent.length()}"

如果您不想被重定向,并且想要第一页的内容,您只需要这样做:

String location = "url-of-webpage-A"
String pageContent = new URL( location ).openConnection().with { con ->
  // We'll do redirects ourselves
  con.instanceFollowRedirects = false

  // Get the location to jump to (in case of a redirect)
  location = con.getHeaderField( "Location" )

  // Read the HTML and close the inputstream
  con.inputStream.withReader { it.text }
}

if( location ) { 
  println "Page wanted to redirect to $location"
}
println "Content was:"
println pageContent