我正在尝试下载-甚至只是打开一个流-到位于webcal://www.omewhere.com/foo?etc=bar的日历。
当我执行以下操作时,Java URL类抛出了一个“未知协议: webcal”异常:
URL url = new URL("webcal://...");即使web资源位于webcal://协议之后,我如何告诉URL类它应该只使用HTTP作为传输协议?
或者,在任何情况下,我如何下载我的日历?
请记住,如果我试图将"webcal://“替换为"http://"”,那么我呼叫的web服务器不会提供日历。
发布于 2013-04-12 19:30:03
据我所知,苹果对"webcal“的使用实际上只是”http“的同义词;所以它应该是有效的。
发布于 2016-03-06 15:07:23
"webcal://“是一个非官方的URI方案,请参阅维基百科上的article。
因此,它可能代表一个或另一个后端实现-例如,您正在调用的web服务器可能正在使用所提到的任何协议实现,例如WebDAV、CalDAV或OpenDAV
但是,如果您想要的只是读取文件的内容,那么任何HTTP客户端都应该做到这一点,因为上面提到的协议都是基于HTTP的。
下面是一个关于如何使用URL自己的机制打开HttpURLConnection读取远程iCal的示例:
URL calendarURL = new URL("http://www.facebook.com/ical/b.php?uid=myUID&key=myKEY");
URLConnection connection = calendarURL.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while (reader.ready()) {
System.out.println(reader.readLine());
}如您所见,我已经将原始URL从
webcal://www.facebook.com/ical/b.php?uid=MYUID&key=MYKEY
至
http://www.facebook.com/ical/b.php?uid=MYUID&key=MYKEY
,因为我们使用的是java.net.URL,而缺省情况下Java不识别这个协议。如果您想要联系的web服务器确实只通过webcal://提供内容,那么您可能需要使用适当的客户端(基于服务器使用的确切协议实现)。例如,有许多提供WebDAV客户端功能的框架,如JackRabbit、Sardine等。
如果您提供有关服务器类型的更多信息,我们可以进一步挖掘。
https://stackoverflow.com/questions/15968184
复制相似问题