1

我正在尝试下载 - 甚至只是打开一个流 - 到位于 webcal://www.somewhere.com/foo?etc=bar 的日历。

当我这样做时,Java URL 类抛出“未知协议:webcal”异常:

URL url = new URL("webcal://...");

我如何告诉 URL 类它应该只使用 HTTP 作为传输协议,即使 Web 资源位于 webcal:// 协议后面的某个位置?

或者,无论如何,我怎样才能下载我的日历?

请记住,如果我尝试将“webcal://”替换为“http://”,我正在调用的 Web 服务器不会为日历提供服务。

4

2 回答 2

2

据我了解,苹果对“webcal”的使用确实只是“http”的代名词;所以它应该工作。

于 2013-04-12T11:30:02.567 回答
1

“webcal://”是一个非官方的 URI 方案,请参阅 Wikipedia上的文章

因此,它可能代表一个或另一个后端实现 - 例如,您正在调用的 Web 服务器可能正在使用任何提到的协议实现,例如WebDAVCalDAVOpenDAV

但是,如果您只想读取文件的内容,那么任何 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 客户端功能,例如JackRabbitSardine等。

如果您提供有关服务器类型的更多信息,我们可以进一步挖掘。

于 2016-03-06T07:07:23.300 回答