我正在尝试使用java应用程序下载vcalendar,但我无法从特定链接下载。
我的代码是:
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)。有些东西不允许我下载,我无法弄清楚为什么,当我尝试使用浏览器时,它可以工作。
答案 0 :(得分:1)
我会遵循此example。基本上,获取连接的响应代码。如果它是重定向(例如在这种情况下为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();
答案 1 :(得分:0)
您应该检查该链接实际提供的内容。例如,它可能是一个已移动的页面,它为您提供了一个HTTP 301代码。您的浏览器会自动知道从新网址获取,但您的程序不会。
例如,您可能需要尝试wireshark在您执行浏览器请求时嗅探实际流量。
答案 2 :(得分:0)
我也认为有重定向。浏览器从ssl secure https://codebits.eu/s/calendar.ics
下载。尝试使用HttpURLConnection,它应该自动跟踪重定向:
HttpURLConnection con = (HttpURLConnection)uri.openConnection();
InputStream in = con.getInputStream();