4

我有一个带有大量参数的长 URL,我想在 Windows 系统上使用 Java 在默认浏览器中打开这些参数

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url)

对于像“ http://www.google.com ”这样的短网址,这很好用。但是对于长 URL(比如 2000 个字符),这根本就没有任何作用:没有例外或类似的东西,它只是被忽略了。

a) Runtime.exec 命令或 b) rundll32 url.dll 命令是否有字符限制?如果是这样,限制是多少?

4

4 回答 4

2

您将遇到这个(存档的)操作系统/浏览器特定的最大 URL 长度问题:

对于“rundll32 url.dll”(即 Microsoft IE),您将被限制为 2,083 个字符(包括 http://)。

从我坐的位置来看,您有两种选择:

  1. 构建(或使用)一个 TinyURL 风格的服务,将你的长 URL 变成短的、重定向的。然而,即使在这里,您也会遇到相同的 URL 长度问题,只是在浏览器本身而不是您的 Runtime() 语句中。例如,浏览器窗口将打开,转到将执行重定向到长 URL 的短 URL 并失败。

  2. 使用 POST 请求并将您的部分或全部 URL 参数隐藏在其中。您可以在 HTTP POST 请求的正文中提供很长的参数,而不是使用 GET 调用。这不会像您的示例代码那么简单。事实上,这对于 rundll32 url.dll 组合可能非常棘手(或不可能)(我不熟悉它)......

于 2008-10-28T09:41:11.320 回答
2

顺便说一句,我建议使用跨平台Desktop.open()Desktop.browse()仅代替 Windows rundll32。如果它无法打开写入应用程序,这会给你一个 IOException。

于 2008-11-19T12:12:25.070 回答
0

它还取决于 Windows 的版本,因为您可能MAX_PATH在命令行上超出了操作系统的长度?

于 2008-10-28T18:36:25.623 回答
0

您也可以尝试 Runtime.exec(String []) 版本,使用它可能会更好。只需将所有空格分隔的参数作为单独的字符串传递:

Runtime.getRuntime().exec(new String [] {"rundll32", "url.dll,FileProtocolHandler", "urlarg1", "urlarg2"});

于 2008-10-29T20:56:11.707 回答