这个Groovy代码输出一个空字符串:
def url = 'http://www.wikidata.org/w/api.php?action=wbgetentities&sites=enwiki&titles=Mozambique&format=xml&props='.toURL()
print url.getText('utf-8')
使用相同的网址,curl
也会返回空,但curl -L
会返回我想要的XML。
Groovy有什么东西与-L
选项相似吗?
-L:如果服务器报告所请求的页面已移动到其他位置(用Location:标题和3XX响应代码表示),则此选项将使curl重做新地点的请求。
答案 0 :(得分:1)
Groovy使用Java的HttpUrlConnection
封面,它不会自动跟踪重定向。但是,这是一个小函数,它将通过检查响应的状态和位置标头并在必要时调用重定向的URL来为您处理它:
def findRealUrl(url) {
HttpURLConnection conn = url.openConnection()
conn.followRedirects = false
conn.requestMethod = 'HEAD'
if(conn.responseCode in [301,302]) {
if (conn.headerFields.'Location') {
return findRealUrl(conn.headerFields.Location.first().toURL())
} else {
throw new RuntimeException('Failed to follow redirect')
}
}
return url
}
可以在GitHub上下载代码。