我正在尝试下载 - 甚至只是打开一个流 - 到位于webcal://www.somewhere.com/foo?etc = bar的日历。
当我这样做时,Java URL类抛出了“未知协议:网络摄像头”异常:
URL url = new URL("webcal://...");
即使网络资源位于webcal://协议后面的某个地方,我怎么能告诉URL类它应该只使用HTTP作为传输协议?
或者,无论如何,我如何下载我的日历?
请注意,如果我尝试将“webcal://”替换为“http://”,我正在呼叫的网络服务器不会提供日历。
答案 0 :(得分:1)
据我了解,Apple使用“webcal”实际上只是“http”的同义词;所以它应该有用。
答案 1 :(得分:1)
“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());
}
如您所见,我已从
更改了原始网址WebCal中://www.facebook.com/ical/b.php UID = MYUID&安培;键=的myKey
到
http://www.facebook.com/ical/b.php?uid=MYUID&key=MYKEY
,因为我们使用java.net.URL,默认情况下Java不识别此协议。如果您要联系的Web服务器确实仅通过webcal提供内容://那么您可能需要使用适当的客户端(基于服务器使用的确切协议实现)。例如,有许多框架提供WebDAV客户端功能,例如JackRabbit,Sardine等。
如果您提供有关服务器类型的更多信息,我们可以进一步挖掘。