Java:处理网络协议

时间:2013-04-12 09:51:21

标签: java http url protocols webcal

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

当我这样做时,Java URL类抛出了“未知协议:网络摄像头”异常:

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

即使网络资源位于webcal://协议后面的某个地方,我怎么能告诉URL类它应该只使用HTTP作为传输协议?

或者,无论如何,我如何下载我的日历?

请注意,如果我尝试将“webcal://”替换为“http://”,我正在呼叫的网络服务器不会提供日历。

2 个答案:

答案 0 :(得分:1)

据我了解,Apple使用“webcal”实际上只是“http”的同义词;所以它应该有用。

答案 1 :(得分:1)

“webcal://”是一个非官方的URI方案,请参阅维基百科article

因此它可能代表一个或另一个后端实现 - 例如您正在调用的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());
    }

如您所见,我已从

更改了原始网址

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客户端功能,例如JackRabbitSardine等。

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