Мне нужно получить файл в память в моем приложении из защищенного веб-сайта. У меня есть URL-адрес файла для захвата, но, похоже, не удалось решить проблему безопасности. Вот код со страницы образцов поваренной книги :
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, то я получаю еще 302 с Cookie и местоположение, возвращаемое к исходному URL. Если я получу доступ к оригиналу, загрузка произойдет правильно.
Итак, мне нужно немного подражать браузеру, но в конце концов все работает.
Создание вики сообщества, чтобы другие могли добавлять другие методы.
Спасибо!