我正在尝试提取网页的内容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:上面的代码不是服务器端逻辑的一部分。我正在桌面应用范围内的客户端执行它。
答案 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