限制“rundll32 url.dll,FileProtocolHandler”的URL长度?

时间:2008-10-28 08:46:45

标签: java windows url

我有一个很长的网址,我想在Windows系统上使用

从Java的默认浏览器中打开大量参数
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url)

对于像“http://www.google.com”这样的简短网址,这很好用。但对于长URL(例如,2000个字符),这根本不做任何事情:没有异常或任何类型的东西,它只是被忽略。

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

4 个答案:

答案 0 :(得分:2)

您将遇到this操作系统/浏览器特定的最大URL长度问题:

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

从我坐的地方,您有两种选择:

  1. 构建(或使用)TinyURL式服务 这将你的长网址变成了 简短的,重定向的。甚至 在这里,你将遇到 相同的URL长度问题,就在内部 浏览器本身而不是你的 Runtime()语句。例如浏览器窗口将打开,转到短URL,该URL将执行重定向到长URL并失败。

  2. 使用POST请求并埋葬一些或 您的所有网址参数 它。而不是使用GET打电话给你 可以提供很长的参数 在HTTP POST请求的正文中。这个 不会像你的示例代码那么简单。事实上,对于rundll32 url.dll组合(我不熟悉),这可能相当棘手(或不可能)......

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

你也可以试试Runtime.exec(String [])版本,你可能会有更好的运气。只需获取所有空格分隔的参数,并将它们作为单独的字符串传递:

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