Скачать файл программно - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь скачать vcalendar с помощью java-приложения, но не могу скачать по определенной ссылке.

Мой код:

URL uri = new URL("http://codebits.eu/s/calendar.ics");
InputStream in = uri.openStream();

int r = in.read();
while(r != -1) {
    System.out.print((char)r);
    r = in.read();
}

Когда я пытаюсь скачать по другой ссылке, это работает (например: http://www.mysportscal.com/Files_iCal_CSV/iCal_AUTO_2011/f1_2011.ics). Что-то не позволяет мне скачать, и я не могу понять, почему, когда я пытаюсь с браузером это работает.

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

Я бы последовал этому примеру . В основном, получите код ответа для соединения. Если это перенаправление (например, 301 в этом случае), найдите местоположение заголовка и попытайтесь получить доступ к файлу, используя это.

Упрощенный пример:

URL uri = new URL("http://codebits.eu/s/calendar.ics");
HttpURLConnection con = (HttpURLConnection)uri.openConnection();
System.out.println(con.getResponseCode());
System.out.println(con.getHeaderField("Location"));

uri = new URL(con.getHeaderField("Location"));
con = (HttpURLConnection)uri.openConnection();
InputStream in = con.getInputStream();
0 голосов
/ 01 декабря 2011

Я тоже думаю, что есть редирект. Браузер загружает из ssl обеспеченных https://codebits.eu/s/calendar.ics. Попробуйте использовать HttpURLConnection , оно должно автоматически выполнять перенаправления:

HttpURLConnection con = (HttpURLConnection)uri.openConnection();
InputStream in = con.getInputStream();
0 голосов
/ 01 декабря 2011

Вы должны проверить, что на самом деле предоставляет эта ссылка. Например, это может быть перемещенная страница, которая возвращает вам код HTTP 301. Ваш браузер автоматически узнает, что нужно пойти и получить его с нового URL, а ваша программа - нет.

Возможно, вы захотите, например, wireshark , чтобы прослушать фактический трафик при выполнении запроса браузера.

...