我需要从安全的 Web 位置将文件放入我的应用程序的内存中。我有要捕获的文件的 URL,但似乎无法解决安全问题。以下是Cookbook 示例页面中的代码:
def download(address)
{
def file = new FileOutputStream(address.tokenize("/")[-1])
def out = new BufferedOutputStream(file)
out << new URL(address).openStream()
out.close()
}
这是我的同一函数的“内存”版本,它应该返回文件内容的字节数组:
def downloadIntoMem(address)
{ // btw, how frickin powerful is Groovy to do this in 3 lines (or less)
def out = new ByteArrayOutputStream()
out << new URL(address).openStream()
out.toByteArray()
}
当我对不安全的 URL 尝试此操作时(选择您可以在网上找到的任何图像文件),它工作得很好。但是,如果我选择一个需要用户/密码的 URL,那就不行了。
好吧,在这方面做更多的工作。Authenticator 方法似乎确实有效,但是以一种迂回的方式。第一次访问该 URL 时,我收到一个 302 响应,其中包含登录服务器的位置。如果我使用 Authenticator 集访问该位置,那么我会得到另一个带有 Cookie 的 302,并且该位置设置回原始 URL。如果我然后访问原始文件,则下载会正确进行。
所以,我必须稍微模仿一下浏览器,但最终一切正常。
将此作为社区 wiki,以便其他人可以添加其他方法。
谢谢!